查询基类时,NHibernate将为每个基类创建一个左外连接。即使查询仅在基础上的属性上,并且在这些属性上设置了投影,也会发生这种情况。
示例:
SELECT this_.Id as y0_, this_.Name as y1_ FROM AnimalBase this_
left outer join Dog this_1_ on this_.Id=this_1_.AnimalBaseFK
left outer join Cat this_2_ on this_.Id=this_2_.AnimalBaseFK
WHERE lower(this_.Name) like @p0;@p0 = '%rover%'
我的问题是如何更改此默认行为?
由于
修改
看这里:
答案 0 :(得分:1)
这样做是因为NHibernate默认使用多态查询。 我的意思是,如果你这样做:
select * from Animal
NHibernate将尝试检索所有动物。因此,如果您有一个继承自Dog
的{{1}}类,则意味着Dog是一个Animal。 (这是逻辑,因为继承描述了Animal
关系)。
您可以禁用此行为。 有关详细信息:Loading a base class through nhibernate incorrectly uses mappings from derived classes