2

如果您执行 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);

我想知道放置FetchFetchMany(为了性能)的最佳顺序。或者顺序是否重要?当我使用实体框架时,我总是先编写包含,这在 nHibernate 中是否相同?

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

4

1 回答 1

3

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

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

_session
    .Query<Entity>()
    .Where(x => x.IsSomething)
    .Select(x => new { MyEntity = x, MyEntitiesChildren = x.Children });
于 2012-08-17T11:25:00.263 回答