Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# nhibernate的FindAll最佳实践_C#_Linq_Nhibernate - Fatal编程技术网

C# nhibernate的FindAll最佳实践

C# nhibernate的FindAll最佳实践,c#,linq,nhibernate,C#,Linq,Nhibernate,我有很多子实体的顶部实体 现在,我想实现FindAll()方法,在这里我使用这个模式查询所有要列出的顶级实体。这很好,但我会得到所有的子对象,警告:在nhib中选择N+1。剖析器 在获得所有对象后,我将它们发送到FromMyDomainModel方法,以将值提取到所需的ViewModel using (ITransaction transaction = session.BeginTransaction()) { List<Property> data =

我有很多子实体的顶部实体

现在,我想实现FindAll()方法,在这里我使用这个模式查询所有要列出的顶级实体。这很好,但我会得到所有的子对象,警告:在nhib中选择N+1。剖析器

在获得所有对象后,我将它们发送到FromMyDomainModel方法,以将值提取到所需的ViewModel

   using (ITransaction transaction = session.BeginTransaction())
   {
       List<Property> data =
                   session.Query<Property>()//I don't need fetch
                   .ToList();
        transaction.Commit();
        return EntityViewModel.FromDomainModel(data);
    }

要减少
选择n+1
问题,您需要设置
批量大小

NH3.2+在默认情况下将加载批量大小设置为20,因此如果您可以升级,我建议您升级。见[NH-2593]

如果无法升级并且正在使用XML映射,请执行以下操作:-

<bag/set/list ... batch-size='50' ..>
...
</bag/set/list>

此外,您还可以在构建会话工厂之前在配置中设置此批处理大小,以便将其应用于所有集合获取。

您是否可以发布
实体
类defn以及映射!NH3.x将插入/更新/删除批大小设置为20,而不是加载批大小。
<bag/set/list ... batch-size='50' ..>
...
</bag/set/list>
HasMany(x => x.Photos).KeyColumn("PropertyId")
  .SetAttribute("batch-size", "50").Cascade.All();