.NET 4.5中是否已弃用ObjectContext?

14

我已经使用 ObjectContexts 很长一段时间了。现在我安装了 VS 2012,惊讶的发现 Entity Data Model 没有一个代码生成项目选项来创建 ObjectContextsEntityObjects,而只有 DbContextsPOCOs

它现在已被弃用吗?我看到 ObjectContext 类仍然可用,但无法将其用作我的 EDMX 输出。


EF 中有很多变化。这与 .NET 版本无关,EF 不是框架的一部分。这在“新功能”中得到了很好的解释:http://blogs.msdn.com/b/adonet/archive/2012/08/15/ef5-released.aspx - Hans Passant
@HansPassant,这并不完全正确。Entity Framework 部分在 .NET 4.5 中(System.Data.Entity.dll),部分在外部(EntityFramework.dll)。设计器属于 System.Data.Entity,完全绑定到 .NET 版本。 - Andre Pena
3个回答

19

ObjectContext没有被弃用,实际上DbContext只是建立在ObjectContext之上的一层。DbContext API的API更简洁/更小,并且更易于使用。此外,POCO实体更加干净。这就是修改代码生成的原因。如果您仍想使用基于ObjectContext和EntityObject的实体,请删除*.edmx文件下的*.tt文件。双击edmx文件以在设计器中打开它。单击设计师表面。在属性中将“代码生成策略”从“无”更改为“默认值”。

编辑

在使用VS2013(可在VS2012中下载)附带的EF6设计器中,行为有些变化。如果您使用的是EF5,则存在两个选项:“T4”和“LegacyObjectContext”。如果您使用EF6,则下拉列表处于禁用状态。如果您想在EF6应用程序中使用ObjectContext,则需要使用EF6 Entity Object生成器(请注意,此链接仅指向模板的一个版本,但实际上根据您需要的情况有几个版本- C# vs.VB.NET,WebSite非WebSite-此处是列表)。您可以在这里找到有关EF6工具的更多详细信息


2
谢谢。真的很奇怪,“默认”代码生成策略不使用任何TT,而默认设计师的工作方式是使用DbContext TT。如果它总是使用TT,并且默认模板已从ObjectContext更改为DbContext,那对我来说会更清晰。 - Andre Pena
我同意这可能会令人困惑。我认为这是由于历史原因,在之前的版本中,“default”表示没有用户的t4文件,而“None”表示没有任何东西,因为用户提供了自己的t4模板。我还认为默认实际上使用了未公开的t4。 - Pawel

3
微软推荐使用EF5.x DbContext生成器来创建新项目,这是VS2012中的默认模板。在VS2012之前的版本中,用户可以通过ExtensionManager(搜索EF5.x)找到它,或者从此处下载

当然,您还可以使用EF4.x EntityObject Generator模板生成EntityObjects和ObjectContext,该模板可以在此处找到

如何设置,请参见此处的说明。


2

我不确定如何使用ObjectContext生成EDMX,但它并没有被弃用。DbContext被使用是因为对于99%的用户来说,ObjectContext的功能是不必要的。

不过你可以从DbContext获取一个ObjectContext的引用:((IObjectContextAdapter)dbContext).ObjectContext


谢谢,我不知道ObjectContext仍然可以访问。 - Andre Pena
我实际上使用ObjectContext,因为有些系统使用N-Tier系统,我无法访问连接到数据库的服务器。因此,我可以创建一个EDMX,它与应用程序和数据服务器的接口进行交互。当以这种方式应用时,ObjectContext非常适合。大多数使用EF的人通常具有2层系统,这就是为什么使用DBContext如此普遍的原因。 - sksallaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接