我有两个与NHibernate映射的类:class应用程序引用class Store与一个属性StoreId。应用程序用户有一个身份证,而类商店有一个分配的ID,但我不认为在这种情况下的问题。双向多对一生成SELECT N + 1
ApplicationUser映射:
<many-to-one name="Store" column="StoreId" class="Store" />
存储映射:
<many-to-one name="ApplicationUser" column="Id" class="ApplicationUser"
property-ref="Store" insert="false" update="false"
fetch="join" outer-join="true" />
当我加载所有商店,一个左外连接被生成以ApplicationUser如预期,但随后构建对象图时NHibernate决定为每个不引用ApplicationUser的商店额外增加SELECT ... FROM ApplicationUser WHERE StoreId = ?
。
这是巨大的矫枉过正,完全没有必要,因为它应该已经知道这些ApplicationUser不存在。
任何人都知道如何阻止NHibernate生成这些额外的查询?
编辑:
类是非常基本的,就像这样:
public class Store
{
public virtual int Id { get; set; }
// ...
public virtual ApplicationUser ApplicationUser { get; set; }
}
public class ApplicationUser
{
public virtual int Id { get; set; }
// ...
public virtual Store Store { get; set; }
}
我想你可能想使用一对一的映射来避免这个问题http://nhforge.org/doc/nh/en/index.html#mapping-declaration-onetoone – Vadim 2011-05-05 18:33:01
是的,我实际上它是一对一的,但也存在问题,但现在我明白这可能是因为我没有配置获取属性... – Koen 2011-05-06 09:01:40