Fluent NHibernate尝试使用每个子类的表映射子类的子类
我正在构建一个具有重继承性的应用程序,并且有一部分存在类a、B和C,它们具有: 甲级 B类:A 丙类:乙类 我将子类映射实现为类B的每个子类样式的表,如下所示: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
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();
}
}
removeExtends()代码>和扩展()代码>@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();
}
}