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
Linq 具有子实体的nhibernate查询和lazy=";假;_Linq_Nhibernate_Linq To Nhibernate - Fatal编程技术网

Linq 具有子实体的nhibernate查询和lazy=";假;

Linq 具有子实体的nhibernate查询和lazy=";假;,linq,nhibernate,linq-to-nhibernate,Linq,Nhibernate,Linq To Nhibernate,在选择父项时,我遇到了为子集合中的每个项生成单独sql查询的问题 我有一个具有IList子对象集合的父对象 如果我使用linq to nhibernate运行以下代码: IList parents=_repository.ToList() 我得到如下sql语句: SELECT * FROM Parent SELECT * FROM Child WHERE ParentId = 1 SELECT * FROM Child WHERE ParentId = 2 SELECT * FROM Child

在选择父项时,我遇到了为子集合中的每个项生成单独sql查询的问题

我有一个具有IList子对象集合的父对象

如果我使用linq to nhibernate运行以下代码: IList parents=_repository.ToList()

我得到如下sql语句:

SELECT * FROM Parent
SELECT * FROM Child WHERE ParentId = 1
SELECT * FROM Child WHERE ParentId = 2
SELECT * FROM Child WHERE ParentId = 3
SELECT * FROM Child WHERE ParentId = 4
etc etc
"from Parent inner join fetch Children"
这显然是非常低效的,并且假设它一定与映射文件有关

以下是子集合的映射:

<bag name="Children" lazy="false" table="Child" cascade="all-delete-orphan">
  <key column="ParentId"/>
  <one-to-many class="Child" />
</bag>

相信我,这是个新手犯的错误

任何帮助都将不胜感激


这完全取决于repository.ToList()在封面下做了什么。您可以通过类似于以下内容的HQL语法强制“急切”获取集合:

SELECT * FROM Parent
SELECT * FROM Child WHERE ParentId = 1
SELECT * FROM Child WHERE ParentId = 2
SELECT * FROM Child WHERE ParentId = 3
SELECT * FROM Child WHERE ParentId = 4
etc etc
"from Parent inner join fetch Children"
HQL语句是灵活的,因此它们倾向于忽略您的集合映射和流畅地或在hbm xml文件中定义的联接策略


您现在应该只看到对数据库执行的一个查询。

看看这个。如果子集合始终需要位于上下文中,则可以在映射文件中管理获取策略。然而,NH最佳实践建议不要这样做。相反,我们总是让集合保持惰性,并在适当的地方对查询设置抓取策略。

它使用linq到nhibernate,如下所示:var query=(从会话中的p.linq()选择p)。ToList();我知道fetch strat是由映射文件中的“lazy”属性管理的?