通过nhibernate加载基类错误地使用派生类的映射

时间:2010-12-28 22:56:52

标签: nhibernate inheritance fluent-nhibernate mapping

我有一个场景,我有一个基类作为一个实体,然后另一个实体派生自另一个基类。两者都在我的域中有意义,可以单独使用。

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语句及其加入子表并获取其他列来确认这一点。有什么方法可以让它使用正确的地图吗?

1 个答案:

答案 0 :(得分:2)

这就是NHibernate的“本质” 您描述的行为称为“多态查询”。

由于MyChildClassMyBaseClass,因此也会检索MyChildClass实例。

如果您想避免此行为,您可以查看this topic中的答案。 (我从来没有'禁用'多态查询能力。)