我是 Entity Framework 的新手,但对 NHibernate 有经验。我正在尝试加载具有多个子集合的对象,并且我正在尝试急切地加载两个子集合。
我想我可以做类似的事情:
return DataContext.Users.Include("ChildCollection1").Include("ChildCollection2")
但是有没有办法将它分成两个查询来提高性能,就像我在 NHibernate 中使用 Future 一样?
我是 Entity Framework 的新手,但对 NHibernate 有经验。我正在尝试加载具有多个子集合的对象,并且我正在尝试急切地加载两个子集合。
我想我可以做类似的事情:
return DataContext.Users.Include("ChildCollection1").Include("ChildCollection2")
但是有没有办法将它分成两个查询来提高性能,就像我在 NHibernate 中使用 Future 一样?
我对NH一无所知。但是你的意思是在EF中显式加载吗?
Context.Entry(aUser).Collection(u => u.ChildCollectionX).Load();
正如这里所解释的,NHibernate 中的期货是一种将查询的执行推迟到稍后的时刻以便批量执行查询的方法。它使用 NHibernate 的MultiQuery 功能。
实体框架没有任何看起来像这样的东西。到目前为止,Include
这是一次性加载子集合的唯一选项。
路线图虽然不是很详细,但也没有在这个方向上显示任何计划。
到目前为止,我发现的最佳解决方案是 EntityFramework.Extended 库中的 FutureQueries 功能:https ://github.com/loresoft/EntityFramework.Extended/wiki/Future-Queries 。
我无法使其与 lambdas 一起使用,但它与字符串路径一起使用...
using (var db = new CMWebTestContext())
{
var q = db.WebTestResults.Include("TestCollection.TransactionCollection.PageCollection");
var r = q.ToList();
return r;
}