我已经使用 ObjectContexts
很长一段时间了。现在我安装了 VS 2012,惊讶的发现 Entity Data Model 没有一个代码生成项目选项来创建 ObjectContexts
和 EntityObjects
,而只有 DbContexts
和 POCOs
。
它现在已被弃用吗?我看到 ObjectContext
类仍然可用,但无法将其用作我的 EDMX 输出。
我已经使用 ObjectContexts
很长一段时间了。现在我安装了 VS 2012,惊讶的发现 Entity Data Model 没有一个代码生成项目选项来创建 ObjectContexts
和 EntityObjects
,而只有 DbContexts
和 POCOs
。
它现在已被弃用吗?我看到 ObjectContext
类仍然可用,但无法将其用作我的 EDMX 输出。
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工具的更多详细信息。
我不确定如何使用ObjectContext
生成EDMX,但它并没有被弃用。DbContext
被使用是因为对于99%的用户来说,ObjectContext
的功能是不必要的。
不过你可以从DbContext
获取一个ObjectContext
的引用:((IObjectContextAdapter)dbContext).ObjectContext