首先在Entity Framework 5模型中,似乎由于类文件的生成方式而发生了一些重大变化(不再生成代码,而是T4模板)
2个例子:
生成的上下文文件不再实现IDisposable
没有构造函数接受连接字符串了
还有更多重大变化吗?对他们有什么解决方案?
最佳答案
现在,从Entity Framework 5中的模型生成的默认代码继承了DbContext而不是ObjectContext。
它仍然实现IDisposable,但是如果您从类似于以下代码的一行中得到错误:
using (var mymodel = new MyModelContext()) { ... }
...抱怨没有实现IDisposable,那么您的问题很可能是您的模型是在引用EF5的单独程序集中定义的,而您尚未向项目添加EF5引用。
正如Ladislav Mrnka在他的答案中已经提到的那样,如果要将连接字符串传递给构造函数,则必须手动创建自己的构造函数才能执行此操作。
如果您想将Entity Framework切换回旧的生成代码样式,它将自动生成您要查找的构造函数,请按照以下步骤操作:
单击EDMX文件的设计器图,然后查看属性窗口。找到一个名为“代码生成策略”的属性,并将其设置为“默认”,而不是“无”。这将告诉Visual Studio在一个大文件中的MyModel.Designer.cs中开始为您的对象模型创建代码,这次使用ObjectContext而不是DbContext。
从您的EDMX文件下面删除以下子文件:MyModel.Context.tt,MyModel.tt。这些是您不再需要的自动生成的文件。如果不删除它们,将导致类命名冲突,因为将两次创建对象。