将 Fetch 或 FetchMany 放在 nHibernate Linq 语句中的最佳顺序
本文关键字:语句 最佳 顺序 Linq nHibernate Fetch FetchMany 放在 | 更新日期: 2023-09-27 18:31:43
如果您执行 nHiberante Linq 查询并且想要预先加载相关对象。你把Fetch
或FetchMany
放在哪里?
喜欢这个:
_session.Query<Entity>()
.Where(x => x.IsSomething)
.FetchMany(x => x.Children);
或者像这样:
_session.Query<Entity>()
.FetchMany(x => x.Children)
.Where(x => x.IsSomething);
我想知道放置Fetch
或FetchMany
的最佳顺序(性能)。或者顺序甚至重要吗?当我使用实体框架时,我总是先编写包含,这在 nHibernate 中也是如此吗?
我们将规范模式与 nHibernate 一起使用。那么,将Fetch
或FetchMany
放入规格中是否明智?
没关系。IQueryable 只是一个查询语句,而 Fetch(),FetchMany() 只是 Nhibernate 查询的一个设置,它放大了查询以返回更多数据,以便您以后不会执行延迟加载。查询不会发送到数据库,直到您调用 ToList()、Single() 等。然后,linq 查询将转换为包含更多连接和列的 sql 查询,然后将其发送到数据库服务器。
以下查询将在获取实体 + 子项时执行"类似"连接,但在这里我将其映射到匿名对象:
_session
.Query<Entity>()
.Where(x => x.IsSomething)
.Select(x => new { MyEntity = x, MyEntitiesChildren = x.Children });