【问题标题】:How can I modify the default code generation strategy for edmx?如何修改 edmx 的默认代码生成策略?
【发布时间】:2011-06-21 11:26:26
【问题描述】:
我想修改默认的代码生成策略,该怎么做?
我只是想将类名从<#=code.Escape(container)#>修改为Entities并将默认连接字符串更改为name=Default。
(我不想为项目创建模板文件,我想对其进行编辑,以便全局工作)
我搜索了.tt 文件,我只能找到ItemTemplates。我不知道默认生成的代码是什么,这是我要编辑的。
更新:我仍然不知道该怎么做。
【问题讨论】:
标签:
c#
entity-framework
templates
entity-framework-4
【解决方案1】:
如果单击 EMDX 文件并在 Visual Studio 中检查文件属性,您可以看到生成代码的内容。查找Custom Tool 属性,该属性将告诉您将 EDMX XML 转换为可编译代码的生成器的类名。
但是关于模型定制,我仍然建议您使用 T4 来获取您的 EDMX 并生成与原始生成器相同的代码。好消息是你可以操纵它,直到你想死为止。
如果您打算在项目中的多个 EMDX 上使用 T4,那么我建议您创建一个 .ttinclude 文件并在每个 .tt 文件中引用它。这样,您将重用现有代码,并且当您更改它时,它将反映在所有生成的文件中。
还有一个问题:全局是什么意思?全局用于您项目中的所有 EDMX 文件或您机器上的所有 EDMX 文件或项目团队中的所有 EDMX 文件或什么? 全局定义。
其他编辑
由于您已将 global 定义为特定机器上的所有项目,这就是我要做的。
首先:使用 T4 允许您调整 EDMX -> 每个项目的代码转换更改,或者更好地说是每个解决方案(特定解决方案中的所有项目)。在同一台机器上的其他项目/解决方案上,您应该包含相同的 T4 模板参考。所以在你的意义上它实际上并不是 global...
您可以做的最好的事情是使用此 T4 模板创建自定义 Visual Studio 项模板,以便将此默认 T4 模板添加到您的解决方案/项目中容易得多。到 T4 为止,这就是全球性的。
也许您应该阅读此 MSDN 条目,其中介绍了您的自定义类型:
How to: Customize Object-Layer Code Generation (Entity Data Model Designer)
【解决方案2】:
我什至不知道是否可以更改默认代码生成。
我想您可以创建一个.tt,而不是尝试修改默认代码生成,它从ObjectContext 生成派生类。这样你就可以随意命名并实现默认构造函数了。
类似:
<#=Accessibility.ForType(container)#> partial class Entities : <#=code.Escape(container)#>
{
public Entities()
: base("name=Default")
{ }
}
这种方法的缺点是您需要使用您创建的每个 EDMX 部署此 .tt 文件。
但是,使用 Visual Studio 的插件架构,您可以考虑创建一个模板,该模板默认创建一个 EDMX 和这个 .tt 文件。作为添加普通“ADO.NET 实体数据模型”的替代品
查看EntityModelCodeGenerator(默认代码生成策略运行的自定义工具),似乎注册了SingleFileGenerator扩展机制,这是一个COM组件。更多信息here。