开发者

"No persister for" using Fluently mapping of Subclass in Fluent NHibernate

I'm doing a very basic thing with Fluent NHibernate. I found a lot of people with similar problems here in SO but none seemed to fix my problem.

I have 1 Class like:

public abstract class ParentClass
{
    public virtual long Id { get; private set; }
    public virtual DateTime CreateDate { get; set; }
    public virtual int Type { get; set; }
}

And 1 Concrete classes like:

public class ChildClass : ParentClass
{
    public virtual 开发者_开发技巧string PropertyX { get; set; }
    public virtual int PropertyY{ get; set; }
}

So I made the mapping as follows:

public class ParentMap : ClassMap<ParentClass>
{
    public ParentMap()
    {
        Id(x => x.Id);
        Map(x => x.CreateDate);

        DiscriminateSubClassesOnColumn("Type");
    }
}

And

public class ChildMap : SubclassMap<ChildClass>
{
    public ChildMap()
    {
        Extends<ParentClass>();

        DiscriminatorValue(1);

        Map(x => x.PropertyX);
        Map(x => x.PropertyY);

    }
}

My legacy database has 2 tables, 1 that holds all the data from the ParentClass and another one that holds the data from the Child with a foreign key in the ID.

The idea is to have different tables for each different implementation of the ParentClass but having the ParentClass table as a single repository for "Ids" and "Create Dates".

I'm creating my SessionFactory as follows:

    private static ISessionFactory CreateSessionFactory()
    {
        return Fluently.Configure()
            .Database(MsSqlCeConfiguration.Standard.ConnectionString(cstr => cstr.FromConnectionStringWithKey("TheConnectionString")))
            .Mappings(mappings => mappings.FluentMappings.AddFromAssemblyOf<ParentClass>()
                .ExportTo(@"c:\temp\Mappings"))
            .BuildSessionFactory();
    }

I'm doing just a basic test of storing things to the database as:

    public void Store(ParentClass parent)
    {
        using (var session = sessionFactory.OpenSession())
        {
            using (var transaction = session.BeginTransaction())
            {
                session.SaveOrUpdate(parent);

                transaction.Commit();
            }
        }
    }

But despite the method waits for a ParentClass variable, I'm passing a ChildClass instance for it (the method is actually a inheritance of an interface, that's why it expects a ParentClass).

And every time I it raises an error on "SaveOrUpdate" method saying "No persister for: ChildClass".

What am I doing wrong?

ps.: Another strange thing is that even with the "ExportTo" method on the SessionFactory creation, no mapping is being write on the folder.


Change

.Mappings(mappings => mappings.FluentMappings.AddFromAssemblyOf<ParentClass>()

To

.Mappings(mappings => mappings.FluentMappings.AddFromAssemblyOf<ParentMap>()
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜