2015-04-02 71 views
1

我想修改实体框架6(模型优先)用于生成类型以便在所有实体类定义上注入GeneratedCodeAttribute的T4模板。我希望在任何项目中添加新的ADO.NET实体数据模型时,在任何解决方案中都会持久保存此功能 - 所以我需要在除了使用实体图生成的T4模板之外进行更改。修改实体框架类型T4模板

EF6专家能否告诉我如何去做这件事?

这是我尝试过什么(没有成功):我叫位于CSharpDbContext.Types.tt T4模板,这似乎是相同的是它和我的.edmx产生的T4模板的内容文件。我假设这个文件是在Visual Studio添加新项目列表中显示的EF 6.x DbContext生成器。 CSharpDbContext.Types.tt我的计算机上的文件的位置是:

C:\ Program Files文件(x86)的\微软的Visual Studio 12.0 \ Common7 \ IDE \的ItemTemplate \ CSHARP \ DATA \ 1033 \ DbCtxCSEF6

当我修改这个文件,但是,我得到完全相同的类定义,就像修改之前一样。如果我将它移动到完全不同的位置,我会再次获得相同的结果。从我可以告诉的是,这个文件和我的edmx特定的T4模板之间没有任何联系。

欣赏是否有人可以对此有所了解。

回答

3

第1步:不要这样做。请勿修改使用EF下载的模板,因为您无法在“干净​​”的机器上轻松而一致地复制该模板。

第2步:一旦您添加EF DB-first,您可以在项目中编辑该模板的副本。这个模板将被存储在代码库中,您将能够在没有“神奇”设置的情况下获得可重复的结果。缺点是每次创建新的EF上下文时都需要修改模板。

要修改打开MyEFItem.tt的模板,请研究它的工作方式并根据需要对其进行编辑。在你的情况下,我会在该.tt中搜索“partial class”,并在该行之前插入[GeneratedCode]。一旦保存,您将看到生成的.cs中的更改,或者您可以右键单击.tt和“运行自定义工具”

+0

注意,谢谢。也许我会请求EF团队修改他们的T4模板来自动完成这个工作 - 它可以帮助像NDepend这样的工具,其中有一个属性有助于过滤掉生成的代码。 – 2015-04-07 17:11:58