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