C# 双向多对一生成选择N+1

C# 双向多对一生成选择N+1,c#,sql-server-2005,nhibernate,many-to-one,bidirectional,C#,Sql Server 2005,Nhibernate,Many To One,Bidirectional,我有两个使用NHibernate映射的类:类应用程序使用属性StoreId引用类存储。应用程序用户有一个标识id,而类存储区有一个分配的id,但我认为在这种情况下这并不重要 应用程序用户映射: <many-to-one name="Store" column="StoreId" class="Store" /> 我认为这里发生的事情是,nHibernate正在尝试加载这两个集合,因为您已经将每个集合指定为“多对一”。。。我认为除了修改映射之外,你什么都做不了 所以a->xb和b->

我有两个使用NHibernate映射的类:类应用程序使用属性StoreId引用类存储。应用程序用户有一个标识id,而类存储区有一个分配的id,但我认为在这种情况下这并不重要

应用程序用户映射:

<many-to-one name="Store" column="StoreId" class="Store" />

我认为这里发生的事情是,nHibernate正在尝试加载这两个集合,因为您已经将每个集合指定为“多对一”。。。我认为除了修改映射之外,你什么都做不了

所以a->xb和b->xa,我的理解是nHibernate将查询这两个关系。。。对我来说有道理


如果不需要集合,您不能将其包含在查询中并依赖延迟加载。

我认为您可能希望使用一对一映射来避免此问题是的,我实际上是一对一的,但也有问题,但现在我明白这可能是因为我没有配置fetch属性。。。
<many-to-one name="ApplicationUser" column="Id" class="ApplicationUser" 
    property-ref="Store" insert="false" update="false" 
    fetch="join" outer-join="true" />
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; }
}