如何阻止Entity Framework生成BOTH ObjectContext和dbContext

时间:2012-10-25 18:00:26

标签: entity-framework dbcontext objectcontext

背景

  • Visual Studio 2012
  • 在VS2012中创建的新Model.EDMX文件
  • 将以前创建的EDMX中的部分EDMX xml复制到新的EDMX中

问题/问题

现在。 EDMX(TT转换,自定义工具,等等)正在生成BOTH DbContext类(在Model.tt/Model.Context.tt文件下) ObjectContext类(通过Model.designer)。 cs文件)。见下图:

Both the Model.tt AND the Designer.cs files are defining my entities

一切都很好并且可以使用DbContext(但显然只有在构建之前删除了Designer.cs文件),但Designer.cs - 及其基于ObjectContext的代码 - 仍然会重新出现。如何阻止此行为?!

4 个答案:

答案 0 :(得分:7)

我没有找到如何停止生成ObjectContext的Designer.cs文件,但我确实弄清楚如何使它无关紧要。只需将Build Action设置为“None”而不是“Compile”。

Set the Build Action to None

答案 1 :(得分:3)

.tt文件将生成代码,无论.edmx中的代码生成策略如何。他们听取.edmx文件更改。至少这是他们为我工作的方式。

通过将代码生成策略转换为None中的.edmx,您可以使.designer.cs文件中没有任何有用的内容。

然后打开项目文件,找到代表.edmx的节点,默认情况下它包含在EntityDeploy节点中,即Build Action值,并删除其Generator子项。< / p>

答案 2 :(得分:1)

在正常的EF Code First项目中,代码生成策略为“无”,并且不生成ObjectContext。

您的代码生成策略设置为“默认”。

要停止在xxxx.Designer.cs中生成ObjectContext,请转到您的edmx文件,并将您的代码生成策略从“默认”更改为“无”。

如果您检查xxxx.Designer.cs

// Default code generation is disabled for model 'C:\Users\xyxy\xyxyxy.Web\Models\xyxy.edmx'. 
// To enable default code generation, change the value of the 'Code Generation Strategy' designer
// property to an alternate value. This property is available in the Properties Window when the model is
// open in the designer.

答案 3 :(得分:0)

我认为问题是EntityModelCodeGenerator文件属性的Custom Tool字段中包含.edmx值。只需删除该值即可。

我认为就是这样,因为我注意到在我作为EF6项目开始的项目中,没有任何价值且没有.designer.cs文件,但在我从EF4升级的两个文件中,他们都有价值和设计师档案。

(这相当于基础<Generator>文件中的.csproj标记。)