将 Fetch 或 FetchMany 放在 nHibernate Linq 语句中的最佳顺序

本文关键字:语句 最佳 顺序 Linq nHibernate Fetch FetchMany 放在 | 更新日期: 2023-09-27 18:31:43

如果您执行 nHiberante Linq 查询并且想要预先加载相关对象。你把FetchFetchMany放在哪里?

喜欢这个:

_session.Query<Entity>()
    .Where(x => x.IsSomething)
    .FetchMany(x => x.Children);

或者像这样:

_session.Query<Entity>()
    .FetchMany(x => x.Children)
    .Where(x => x.IsSomething);

我想知道放置FetchFetchMany的最佳顺序(性能)。或者顺序甚至重要吗?当我使用实体框架时,我总是先编写包含,这在 nHibernate 中也是如此吗?

我们将规范模式与 nHibernate 一起使用。那么,将FetchFetchMany放入规格中是否明智?

将 Fetch 或 FetchMany 放在 nHibernate Linq 语句中的最佳顺序

没关系。IQueryable 只是一个查询语句,而 Fetch(),FetchMany() 只是 Nhibernate 查询的一个设置,它放大了查询以返回更多数据,以便您以后不会执行延迟加载。查询不会发送到数据库,直到您调用 ToList()、Single() 等。然后,linq 查询将转换为包含更多连接和列的 sql 查询,然后将其发送到数据库服务器。

以下查询将在获取实体 + 子项时执行"类似"连接,但在这里我将其映射到匿名对象:

_session
    .Query<Entity>()
    .Where(x => x.IsSomething)
    .Select(x => new { MyEntity = x, MyEntitiesChildren = x.Children });