DbContext和ObjectContext之间有什么区别

时间:2013-02-13 16:14:27

标签: c# asp.net entity-framework

来自MSDN

  

表示工作单元和存储库模式的组合,使您可以查询数据库并将更改组合在一起,然后将更改作为一个单元写回到存储中。 DbContext在概念上与ObjectContext类似。

我虽然DbContext只处理与DB的连接以及针对DB工作的线程数。

现在我明白它包含跟踪机制?我以为这是在ObjectContext

那么(用简单的英语)它们之间的区别是什么?

3 个答案:

答案 0 :(得分:20)

DbContext是ObjectContext类的轻量级版本,它几乎位于ObjectContext之上(甚至还有一种方法可以从DbContext获取ObjectContext)。它也更容易使用,IMO,并使CRUD操作成为一种习惯。

为了获得更好的信息,有关差异的更多信息的人比Julie Lerman更好看,如EF 4.1中所示。

答案 1 :(得分:5)

DbContext是一个较小的API,暴露了最常用的 ObjectContext的功能。在某些情况下,这些功能在DbContext中进行镜像 API。在其他情况下,实体框架团队简化了更复杂的编码 通过向我们提供像Find或DbSet.Local这样的属性的方法。但是有 潜伏在你下面的一个大API你可能仍然需要访问。例如,你可能 希望直接使用MetadataWorkspace来编写针对类的通用代码 因为该API可以比反射更有效地读取模型。另外, MetadataWorkspace能够提供有关元数据的更多信息 可以发现反射,例如,关键属性。或者你可能想要 利用通过Entity SQL公开的特定于数据库的功能, 您无法从LINQ访问实体。 或者您可能已经有了申请 使用ObjectContext编写,并且您希望在将来的更新中利用DbContext 而不替换所有的ObjectContext代码。(编程DbContext参考)

答案 2 :(得分:0)

对象上下文:

1。支持编译查询 2.支持实体的自我追踪 3.适用于实体框架4.0及以下版本 4.它不是线程安全的。 5.最适合数据库优先和模型优先的方法。

数据库上下文:

1。不支持编译查询 2.它不支持实体的自我跟踪 3.适用于实体框架4.1及更高版本 4.对于静态和共享成员(公共)是线程安全的。 5,最好是数据库优先,模型优先和代码优先。