随着EF 4.1的推出以及CTP5可用几个月,我决定试用新功能。如我所见,有多个生成项可用(DbContext
和三个不同的ObjectContext's
)。我也注意到它们不可互换 - 我首先在我的一个应用程序中使用POCO ObjectContext,今天切换到DbContext,我的整个存储库都崩溃了。它基于LoadProperty()
方法,DeleteObject()
和AddObject()
方法,DbSet
类中的DbContext
类都缺少这些方法。
我知道这里有一个很棒的博客系列http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-1-introduction-and-model.aspx介绍了新的功能,但它从来没有真正说明何时选择什么。
我的要求是:
Include()
,使用POCO上下文我做了
它通过LoadProperty()
现在
在DbContext
我相信我会用
强类型Include()
)。答案 0 :(得分:2)
这两者之间的差异主要在API and feature set。 DbContext
当然有Include
用于查询和Load
,但您可以在别处找到它。此外,在使用CTP5程序集时,对于Include
和ObjectSet
(available on IQueryable interface作为扩展方法,您将使用强类型DbSet
。
显式加载(相当于LoadProperty
)由Load
或DbReferenceEntry<T>
上的DbCollectionEntry<T>
方法执行 - 检查Explicit loading related entities。它比LoadProperty
更好用,因为您可以定义用于加载的过滤器。
答案 1 :(得分:0)
您首先假设您不能对MVC使用延迟加载。
如果您在更高级别管理上下文,您将能够毫无问题地执行此操作。