我有两个用NHibernate映射的类:class Application引用具有StoreId属性的类Store。应用程序用户具有身份ID,而类Store具有指定的ID,但在这种情况下我不认为这很重要。
ApplicationUser mapping:
<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决定为每个没有存储的商店执行额外的SELECT ... FROM ApplicationUser WHERE StoreId = ?
引用ApplicationUser。
这是一个巨大的矫枉过正,完全没必要,因为它应该已经知道那些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; }
}
答案 0 :(得分:0)
我认为这里发生的事情是nHibernate试图加载这两个集合,因为你已经将每个集合指定为“多对一”...我认为除了修改映射之外没有什么可以做的。 。
所以a - &gt; xb和b - &gt; xa,我的理解是nHibernate会查询两个关系......对我来说很有意义。
如果不需要集合,则无法将其包含在查询中并依赖延迟加载。