首先在 Entity Framework 5 模型中,由于类文件的生成方式,似乎存在一些重大变化(不再生成代码,而是 T4 模板)
2个例子:
- 生成的上下文文件不再实现 IDisposable
- 不再有一个构造函数需要一个连接字符串
是否有更多重大变化?他们的解决方案是什么?
首先在 Entity Framework 5 模型中,由于类文件的生成方式,似乎存在一些重大变化(不再生成代码,而是 T4 模板)
2个例子:
是否有更多重大变化?他们的解决方案是什么?
从 Entity Framework 5 中的模型生成的默认代码现在继承 DbContext 而不是 ObjectContext。
这仍然实现了 IDisposable,但是如果您从类似于此的代码行中收到错误:
using (var mymodel = new MyModelContext()) { ... }
...抱怨没有实现 IDisposable,那么您的问题很可能是您的模型是在引用 EF5 的单独程序集中定义的,并且您没有向项目添加 EF5 引用。
正如 Ladislav Mrnka 在他的回答中已经提到的那样,如果要将连接字符串传递给构造函数,则必须手动创建自己的构造函数来执行此操作。
如果您想将 Entity Framework 切换回生成代码的旧样式,这将自动生成您正在寻找的构造函数,请按照以下步骤操作:
生成的上下文文件不再实现 IDisposable
IDisposable
仍然由父上下文类型实现。生成的类型仍然是一次性的。
不再有一个构造函数需要一个连接字符串
它现在使用约定来获取连接字符串,但您可以将自己的构造函数添加到模板或上下文的部分类部分。
是否有更多重大变化?他们的解决方案是什么?
这是一个彻底的改变,因为它使用不同的 API - DbContext API 而不是 ObjectContext API,这意味着不同的类型、不同的方法、POCO 实体等。如果你想恢复原始代码生成,你必须删除那些 T4 模板并启用代码生成如 .Designer.cs 文件中所述,但当前推荐的方法是使用 POCO 和 DbContext API。
我在 using 语句需要扩展 IDisposable 的类型时遇到了同样的问题...原来我忘记在我的项目中引用 System.Data.Entity ...添加了引用并解决了问题。