Entity Framework 5模型首先 - IDisposable在哪里消失了?

Tom*_*leu 13 entity-framework entity-framework-5 ef-model-first

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

2个例子:

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

是否有更多的突破性变化?他们的解决方案是什么?

BG1*_*100 34

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

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

using (var mymodel = new MyModelContext()) { ... }
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Lad*_*nka 5

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

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

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

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

是否有更多的突破性变化?他们的解决方案是什么?

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