Fluent NHibernate尝试使用每个子类的表映射子类的子类

Fluent NHibernate尝试使用每个子类的表映射子类的子类,nhibernate,inheritance,subclass,fluent-nhibernate-mapping,joined-subclass,Nhibernate,Inheritance,Subclass,Fluent Nhibernate Mapping,Joined Subclass,我正在构建一个具有重继承性的应用程序,并且有一部分存在类a、B和C,它们具有: 甲级 B类:A 丙类:乙类 我将子类映射实现为类B的每个子类样式的表,如下所示: class BMap : SubclassMap<B> { public BMap() { Extends<A>(); KeyColumn("ID"); } } class CMap : SubclassMap<C> { public

我正在构建一个具有重继承性的应用程序,并且有一部分存在类a、B和C,它们具有:

甲级

B类:A

丙类:乙类

我将子类映射实现为类B的每个子类样式的表,如下所示:

class BMap : SubclassMap<B>
{
    public BMap()
    {
        Extends<A>();
        KeyColumn("ID");
    }
}
class CMap : SubclassMap<C>
{
    public CMap()
    {
        Extends<B>();
        KeyColumn("ID");
    }
}

我浏览了Hibernate/NHibernate论坛,但找不到这个问题的答案。

这确实与NH3.3.1.4000的预期效果相同

public class A
{
    public virtual int Id { get; protected set; }
}

public class B : A { }
public class C : B { }

public class AMap : ClassMap<A>
{
    public AMap()
    {
        Id(x => x.Id);
    }
}

public class BMap : SubclassMap<B> { }
public class CMap : SubclassMap<C> { }
public static void Main(string[] args)
{
    var config = Fluently.Configure()
        .Database(SQLiteConfiguration.Standard.InMemory().ShowSql().FormatSql())
        .Mappings(m => m.FluentMappings
            .Add<AMap>()
            .Add<BMap>()
            .Add<CMap>()
        )
        .BuildConfiguration();

    using (var sf = config.BuildSessionFactory())
    using (var session = sf.OpenSession())
    {
        new SchemaExport(config).Execute(true, true, false, session.Connection, null);
        session.Save(new C());
        session.Flush();
    }
}
公共A类
{
公共虚拟整数Id{get;protected set;}
}
公共B类:A{}
公共类C:B{}
公共类AMap:ClassMap
{
公共AMap()
{
Id(x=>x.Id);
}
}
公共类BMap:子类map{}
公共类CMap:子类映射{}
公共静态void Main(字符串[]args)
{
var config=fluntly.Configure()
.Database(SQLiteConfiguration.Standard.InMemory().ShowSql().FormatSql())
.Mappings(m=>m.FluentMappings
.Add()
.Add()
.Add()
)
.BuildConfiguration();
使用(var sf=config.BuildSessionFactory())
使用(var session=sf.OpenSession())
{
新SchemaExport(config.Execute)(true、true、false、session.Connection、null);
session.Save(新的C());
session.Flush();
}
}

remove
Extends()
扩展()@Firo,但B的数据并没有持久化到B表中。您可以发布类A的映射吗?在一个简单的例子中,它对我有效
public class A
{
    public virtual int Id { get; protected set; }
}

public class B : A { }
public class C : B { }

public class AMap : ClassMap<A>
{
    public AMap()
    {
        Id(x => x.Id);
    }
}

public class BMap : SubclassMap<B> { }
public class CMap : SubclassMap<C> { }
public static void Main(string[] args)
{
    var config = Fluently.Configure()
        .Database(SQLiteConfiguration.Standard.InMemory().ShowSql().FormatSql())
        .Mappings(m => m.FluentMappings
            .Add<AMap>()
            .Add<BMap>()
            .Add<CMap>()
        )
        .BuildConfiguration();

    using (var sf = config.BuildSessionFactory())
    using (var session = sf.OpenSession())
    {
        new SchemaExport(config).Execute(true, true, false, session.Connection, null);
        session.Save(new C());
        session.Flush();
    }
}