【问题标题】:What's the difference between DbContext and ObjectContextDbContext 和 ObjectContext 有什么区别
【发布时间】:2013-02-13 16:14:27
【问题描述】:
来自MSDN:
代表工作单元和存储库模式的组合,使您能够查询数据库并将更改组合在一起,然后将这些更改作为一个单元写回存储。 DbContext 在概念上类似于 ObjectContext。
我虽然DbContext 只处理与数据库的连接以及针对数据库工作的线程数。
现在我明白它包含跟踪机制了吗?我以为这是在ObjectContext。
那么(用简单的英语)它们之间的区别是什么?
【问题讨论】:
标签:
c#
asp.net
entity-framework
【解决方案1】:
DbContext 是 ObjectContext 类的轻量级版本,它几乎位于 ObjectContext 之上(甚至有一种方法可以从 DbContext 获取 ObjectContext)。它也更容易使用,IMO,并使 CRUD 操作变得轻而易举。
如需更好的信息,谁比Julie Lerman 更适合了解有关差异的更多信息,正如 EF 4.1 中引入的那样。
【解决方案2】:
DbContext 是一个较小的 API,暴露了最常用的
ObjectContext 的特点。在某些情况下,这些功能会在 DbContext 中镜像
API。在其他情况下,实体框架团队简化了更复杂的编码
通过为我们提供 Find 之类的方法或 DbSet.Local 之类的属性。但是有
潜伏在下面的大型 API,您可能仍需要访问它。例如,您可能
希望直接使用 MetadataWorkspace 来编写针对类的通用代码
因为该 API 可以比反射更有效地读取模型。此外,
MetadataWorkspace 能够提供比您更多的元数据信息
可以通过反射发现,例如,对于 Key 属性。或者你可能想要
利用通过 Entity SQL 公开的特定于数据库的函数,
您无法从 LINQ to Entities 访问它。
或者您可能已经有一个应用程序
使用 ObjectContext 编写,并且您希望在以后的更新中利用 DbContext
无需替换所有 ObjectContext 代码。(来自 Programming DbContext 的参考)
【解决方案3】:
对象上下文:
1.支持编译查询
2.支持实体自追踪
3.适用于实体框架4.0及以下版本
4.它不是线程安全的。
5.最好是 DB first 和 model first 的方法。
数据库上下文:
1.不支持编译查询
2.不支持实体自追踪
3.适用于实体框架4.1及以上版本
4.静态和共享成员(公共)是线程安全的。
5.最好是DB优先,模型优先,代码优先。