14

我已经使用ObjectContexts了很长时间了。现在我已经安装了 VS 2012,令我惊讶的是,实体数据模型没有用于创建ObjectContextsandEntityObjects而不是DbContextsand的代码生成项的选项POCOs

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

4

3 回答 3

19

不推荐使用 ObjectContext。实际上 DbContext 只是 ObjectContext 之上的一层。DbContext API 具有更好/更小的 API,并且更易于使用。POCO 实体也更干净。这就是改变代码生成的原因。如果您仍想使用基于 ObjectContext 和 EntityObject 的实体,请删除 *.edmx 文件下的 *.tt 文件。双击 edmx 文件在设计器中打开它。单击设计器表面。在属性中将“代码生成策略”从“无”更改为“默认”。

编辑

该行为在 VS2013 附带的 EF6 设计器中发生了一些变化(并且可用于 VS2012 的下载)。如果您使用的是 EF5,则两个选项是:“T4”和“LegacyObjectContext”。如果您使用的是 EF6,则下拉菜单将被禁用。如果您想在 EF6 应用程序中使用 ObjectContext,您需要使用 EF6 的实体对象生成器(请注意,此链接仅指向模板的一个版本,但实际上有几个版本取决于您的需要 - C# 与 VB。 NET,网站非网站 -是列表)。您可以在此处找到有关 EF6 工具更改的更多详细信息。

于 2012-11-28T21:06:10.063 回答
3

Microsoft 推荐EF5.x DbContext Generator用于新项目。它是 VS2012 中的默认模板。PreVS2012 用户可以使用 ExtensionManager 找到它(搜索 EF5.x)或在此处下载。

当然,您仍然可以生成EntityObjectsObjectContext使用EF4.x EntityObject Generator可以在此处找到的模板。

此处描述了如何设置。

于 2012-11-28T17:56:07.367 回答
2

我不确定如何使用 EDMX 生成ObjectContext,但不建议使用它。DbContext之所以使用,是因为 99% 的用户ObjectContext不需要 的功能。

但是,您可以从 a 获取对 ObjectContext 的引用DbContext((IObjectContextAdapter)dbContext).ObjectContext

于 2012-11-28T17:56:21.833 回答