c# - 修改 Entity Framework 类型 T4 模板

标签 c# entity-framework templates visual-studio-2012

我想修改 Entity Framework 6(模型优先)用于生成类型的 T4 模板,以便在所有实体类定义中注入(inject) GeneratedCodeAttribute。我希望每当我在任何项目、任何解决方案中添加新的 ADO.NET 实体数据模型时都保留此功能 - 因此我需要对除使用我的实体图生成的 T4 模板之外的其他内容进行更改。

EF6 专家可以建议我如何去做吗?

这是我尝试过的方法(没有成功):我找到了一个名为 CSharpDbContext.Types.tt 的 T4 模板,其内容似乎与生成的 T4 模板相同我的 .edmx 文件。我假设此文件是显示在 Visual Studio 添加新项列表中的 EF 6.x DbContext 生成器。 CSharpDbContext.Types.tt在我电脑上的文件位置是:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplates\CSharp\Data\1033\DbCtxCSEF6

然而,当我修改这个文件时,我得到了与修改前完全相同的类定义。如果我将它移动到一个完全不同的位置,我会再次得到相同的结果。据我所知,此文件与我的特定于 edmx 的 T4 模板之间没有任何联系。

如果有人可以阐明这一点,我们将不胜感激。

最佳答案

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

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

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

关于c# - 修改 Entity Framework 类型 T4 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29420672/

相关文章:

c# - Entity Framework + Linq LEFT JOIN 使用 where 子句?

c# - 防止数据网格在 C# 中加载 Entity Framework 导航属性

c++ - 添加到动态数组

c++ - 推断模板的运算符/函数的返回类型

c# - 在字典上使用 LINQ Where 子句时,如何返回相同类型的字典?

c# - 验证csv文件的内容#

c# - Entity Framework 初始化最佳实践

c++ - 为什么我不能用 const_iterator 调用模板基类构造函数?

c# - 单例模式如何在网络上下文中工作?

c# - 重新初始化源列表时,LINQ 查询返回旧结果