13

首先在 Entity Framework 5 模型中,由于类文件的生成方式,似乎存在一些重大变化(不再生成代码,而是 T4 模板)

2个例子:

  • 生成的上下文文件不再实现 IDisposable
  • 不再有一个构造函数需要一个连接字符串

是否有更多重大变化?他们的解决方案是什么?

4

3 回答 3

34

从 Entity Framework 5 中的模型生成的默认代码现在继承 DbContext 而不是 ObjectContext。

这仍然实现了 IDisposable,但是如果您从类似于此的代码行中收到错误:

using (var mymodel = new MyModelContext()) { ... }

...抱怨没有实现 IDisposable,那么您的问题很可能是您的模型是在引用 EF5 的单独程序集中定义的,并且您没有向项目添加 EF5 引用。

正如 Ladislav Mrnka 在他的回答中已经提到的那样,如果要将连接字符串传递给构造函数,则必须手动创建自己的构造函数来执行此操作。

如果您想将 Entity Framework 切换回生成代码的旧样式,这将自动生成您正在寻找的构造函数,请按照以下步骤操作:

  1. 单击 EDMX 文件的设计器表面,然后查看属性窗口。找到一个名为“代码生成策略”的属性并将其设置为“默认”而不是“无”。这将告诉 Visual Studio 开始在一个大文件中为 MyModel.Designer.cs 中的对象模型创建代码,这次使用 ObjectContext 而不是 DbContext。
  2. 从您的 EDMX 文件下方删除以下子文件:MyModel.Context.tt、MyModel.tt。这些是您不再需要的自动生成的文件。如果您不删除它们,您将遇到类命名冲突,因为您的对象将被创建两次。
于 2012-09-24T16:09:35.403 回答
5

生成的上下文文件不再实现 IDisposable

IDisposable仍然由父上下文类型实现。生成的类型仍然是一次性的。

不再有一个构造函数需要一个连接字符串

它现在使用约定来获取连接字符串,但您可以将自己的构造函数添加到模板或上下文的部分类部分。

是否有更多重大变化?他们的解决方案是什么?

这是一个彻底的改变,因为它使用不同的 API - DbContext API 而不是 ObjectContext API,这意味着不同的类型、不同的方法、POCO 实体等。如果你想恢复原始代码生成,你必须删除那些 T4 模板并启用代码生成如 .Designer.cs 文件中所述,但当前推荐的方法是使用 POCO 和 DbContext API。

于 2012-09-20T08:02:17.513 回答
1

我在 using 语句需要扩展 IDisposable 的类型时遇到了同样的问题...原来我忘记在我的项目中引用 System.Data.Entity ...添加了引用并解决了问题。

于 2015-04-07T01:19:27.333 回答