我有一个场景,我有一个基类作为一个实体,然后另一个实体派生自另一个基类。两者都在我的域中有意义,可以单独使用。
public class MyBaseClass
{
int ID { get; set; }
string Name { get; set; }
}
public class MyChildClass
{
string AdditionalField { get; set; }
}
我已经使用类似这样的ClassMap使用Fluent nHibernate映射:
public class MyBaseClassMap : ClassMap<MyBaseClass>
{
Id("MyBaseClassID");
Map(x => x.Name);
}
public class MyChildClassMap : SubclassMap<MyChildClass>
{
Map(x => x.AdditionalField);
}
当我尝试获取基类的副本时,它正在发生什么,它使用子类的映射。它好像它不知道基类和子类之间的区别,或者它为它选择了错误的映射。我通过观察SQL语句及其加入子表并获取其他列来确认这一点。有什么方法可以让它使用正确的地图吗?
答案 0 :(得分:2)
这就是NHibernate的“本质” 您描述的行为称为“多态查询”。
由于MyChildClass
是MyBaseClass
,因此也会检索MyChildClass实例。
如果您想避免此行为,您可以查看this topic中的答案。 (我从来没有'禁用'多态查询能力。)