通过NHibernate的装载基类错误地使用从派生的类的映射(Loading a base clas

2019-09-29 01:56发布

我有一种情况,我有一个基类作为一个实体,然后从其他基类派生另一个实体。 两者都在我的领域和意义,可以单独使用。

public class MyBaseClass
{
    int ID { get; set; }
    string Name { get; set; }
}

public class MyChildClass
{
    string AdditionalField { get; set; }
}

我一直在使用功能NHibernate使用类映射这样既映射:

public class MyBaseClassMap : ClassMap<MyBaseClass>
{
   Id("MyBaseClassID");
   Map(x => x.Name);
}

public class MyChildClassMap : SubclassMap<MyChildClass>
{
   Map(x => x.AdditionalField);
}

这是怎么回事,当我尝试获取基类的副本,它使用了子类的映射。 它,如果它不知道基地和子类,或者它的选择错误映射它之间的区别。 我通过观察SQL语句及其加入到子表,并获取其他列证实了这一点。 任何方式得到它使用正确的地图吗?

Answer 1:

这是NHibernate的的“自然”。
您所描述的行为,被称为“多态查询”。

由于MyChildClassMyBaseClass ,所述MyChildClass实例被检索为好。

如果你想避免这种情况,你也许可以看看在回答这个话题 。 (我从来没有“禁用”多态查询的能力)。



文章来源: Loading a base class through nhibernate incorrectly uses mappings from derived classes