通过nhibernate加载基类会错误地使用派生类的映射
我有一个场景,其中我有一个基类作为一个实体,然后是从另一个基类派生的另一个实体。两者在我的领域中都有意义,可以单独使用通过nhibernate加载基类会错误地使用派生类的映射,nhibernate,inheritance,fluent-nhibernate,mapping,Nhibernate,Inheritance,Fluent Nhibernate,Mapping,我有一个场景,其中我有一个基类作为一个实体,然后是从另一个基类派生的另一个实体。两者在我的领域中都有意义,可以单独使用 public class MyBaseClass { int ID { get; set; } string Name { get; set; } } public class MyChildClass { string AdditionalField { get; set; } } 我已经使用Fluent nHibernate和ClassMap映射
public class MyBaseClass
{
int ID { get; set; }
string Name { get; set; }
}
public class MyChildClass
{
string AdditionalField { get; set; }
}
我已经使用Fluent nHibernate和ClassMap映射了这两个对象,如下所示:
public class MyBaseClassMap : ClassMap<MyBaseClass>
{
Id("MyBaseClassID");
Map(x => x.Name);
}
public class MyChildClassMap : SubclassMap<MyChildClass>
{
Map(x => x.AdditionalField);
}
公共类MyBaseClassMap:ClassMap
{
Id(“MyBaseClassID”);
Map(x=>x.Name);
}
公共类MyChildClassMap:子类映射
{
Map(x=>x.AdditionalField);
}
当我尝试获取基类的一个副本时,会发生什么,它使用子类的映射。它好像不知道基类和子类之间的区别,或者它为它选择了错误的映射。我通过观察SQL语句及其与子表的连接并获取附加列来确认这一点。有没有办法使用正确的地图呢?这就是NHibernate的“本质” 您描述的行为称为“多态查询” 由于
MyChildClass
是MyBaseClass
,因此也会检索MyChildClass实例
如果您想避免这种行为,您可以查看中的答案。(我从未“禁用”多态查询功能)。“选择未中断”。NHibernate的行为完全符合文件规定。这非常有效。我刚刚在我的子类映射中添加了多态性.Explicit(),现在它可以正常工作了。谢谢