实体框架5模型先行-IDisposable去哪儿了



首先在实体框架5模型中,由于类文件的生成方式,似乎出现了一些突破性的变化(不再生成代码,而是T4模板)

2个例子:

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

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

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

这仍然实现了IDisposable,但如果你从一行类似的代码中得到错误:

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

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

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

如果你想将实体框架切换回旧风格的生成代码,这将自动生成你想要的构造函数,那么请遵循以下步骤:

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

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

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

没有一个构造函数再接受连接字符串

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

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

这是一个突破性的变化,因为它使用了不同的API-DbContext API,而不是ObjectContext API,这意味着不同的类型、不同的方法、POCO实体等。如果要返回到原始代码生成,则必须删除这些T4模板并启用代码生成,如.Designer.cs文件中所述,但当前推荐的方法是使用POCO和DbContext API。

我遇到了同样的问题,using语句需要一个扩展IDisposable的类型。。。结果发现我忘记在项目中引用System.Data.Entity。。。添加了引用并解决了问题。

只需清理和构建项目,不要忘记添加对实体的引用。

最新更新