在NHibernate Linq语句中放置Fetch或FetchMany的最佳顺序

时间:2012-04-20 14:54:36

标签: c# linq fluent-nhibernate

如果您执行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放在规范中是否明智?

1 个答案:

答案 0 :(得分:3)

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

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

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