我想修改默认代码生成策略,我该怎么做?
我只是想将类名从<#=code.Escape(container)#>
修改为Entities
,并将默认连接字符串更改为name=Default
。
(我不想为项目创建模板文件,我想编辑它以便全局工作)
我搜索了.tt
个文件,我只能找到ItemTemplates。我不知道默认情况下生成代码是什么,这是我想编辑的代码。
更新:我仍然不知道该怎么做。
答案 0 :(得分:5)
如果单击EMDX文件并在Visual Studio中检查文件属性,则可以看到生成代码的内容。查找Custom Tool
属性,该属性将告诉您将EDMX XML转换为可编译代码的生成器的类名。
但是对于模型定制,我仍然建议您使用T4来获取EDMX并生成与原始生成器相同的代码。好处是你可以操纵它,直到你死了,直到你死了。
如果您打算在项目中的几个EMDX上使用T4,那么我建议您创建一个.ttinclude
文件并在每个.tt
文件中引用它。这样您就可以重用现有代码,当您更改它时,它将反映在所有生成的文件中。
还有一个问题: 全球是什么意思?全局用于项目中的所有EDMX文件,或机器上的所有EDMX文件或项目团队中的所有EDMX文件或什么?定义全球。
由于您已将 global 定义为特定计算机上的所有项目,因此我就是这样做的。
首先:使用T4可以调整EDMX - &gt;每个项目的代码转换更改或更好地说每个解决方案(特定解决方案中的所有项目)。在同一台机器上的其他项目/解决方案中,您应该包含相同的T4模板参考。所以你的意义上并不是全球 ......
您可以做的最好的事情是使用此T4模板创建自定义Visual Studio项目模板,这样可以更轻松地将此默认T4模板添加到您的解决方案/项目中。这就像T4那样全球化。
也许您应该阅读这篇关于您的自定义类型的MSDN条目:
How to: Customize Object-Layer Code Generation (Entity Data Model Designer)
答案 1 :(得分:1)
我不知道是否有可能改变默认代码生成。
我认为您可以创建一个.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
(由默认codegen策略运行的自定义工具),它似乎是使用SingleFileGenerator
可扩展性机制注册的,它是一个COM组件。更多信息here。