实体框架:为什么模板不再生成“.designer.cs”源文件

时间:2012-12-01 13:19:55

标签: visual-studio entity-framework visual-studio-2012 t4

Entity Framework 3.5 / 4.0中的默认类型生成会发出“Xxxx.designer.cs”源文件中的每种类型(其中“Xxxx”是要生成的类型的名称)。然后,这允许开发人员生成他自己的“Xxxx.cs”源文件,其中可以进行进一步的实现,或者可以将属性添加到元数据类等。

最近提供的T4模板(POCO,Self Tracking等),包括VS2012中的默认类型生成,所有genrate“Xxxx.cs”本身都没有“.designer”后缀。

我知道很容易覆盖T4模板的行为以在文件名中发出“.designer”,但我在这里遗漏了一些我们实际上不鼓励通过部分定义扩展这些类的东西?

在我最近生成Self Tracking Entities的项目中,我发现我必须重命名发出的文件,以便我可以使用Metadata类属性扩展定义,以及.Equals(object)和.GetHashcode()的覆盖。 (例如,EF无法正确检测重复)。

是否有一些我错过的东西,我们现在希望将发出的部分类保留为原样,或者这只是一个疏忽,你们大多数人还必须重命名发出的源文件?

1 个答案:

答案 0 :(得分:0)

VS2012中的代码生成策略已发生变化。在生成的代码使用基于EntityObject的实体和从ObjectContext类派生的上下文类之前。 VS2012默认生成POCO实体和DbContext dervied context。如果您仍需要基于ObjectContext的上下文和基于EntityObject的实体,则需要:

  1. 右键单击设计器图面并选择属性
  2. 将“代码生成策略”从“无”更改为“默认”
  3. 从解决方案中删除.tt文件,以避免同时拥有上下文和重复实体。