如何修改edmx的默认代码生成策略?

我想修改默认的代码生成策略,我该怎么做?

我只想将类名从Entities ,并将默认连接字符串更改为name=Default

(我不想为项目创建模板文件,我想编辑它以便全局工作)

我搜索过.tt文件,我只能找到ItemTemplates。 我不知道默认情况下生成代码是什么,这是我想要编辑的代码。

更新:我还是不知道该怎么做。

如果单击EMDX文件并在Visual Studio中检查文件属性,则可以查看生成代码的内容。 查找Custom Tool属性,该属性将告诉您将EDMX XML转换为可编译代码的生成器的类名。

但是对于模型定制,我仍然建议您使用T4来获取EDMX并生成与原始生成器相同的代码。 好的是,你可以操纵它,直到你死了,如果你愿意的话。

如果您打算在项目中的几个EMDX上使用T4,那么我建议您创建一个.ttinclude文件并在每个.tt文件中引用它。 这样您将重用现有代码,当您更改它时,它将反映在所有生成的文件中。

还有一个问题: 全球的意思是什么? 全局用于项目中的所有EDMX文件,或机器上的所有EDMX文件或项目团队中的所有EDMX文件或什么? 全球定义。

额外编辑

既然你已经将全局定义为特定机器上的所有项目,那么这就是我要做的。

首先:使用T4可以调整EDMX – >每个项目的代码转换更改或更好地说每个解决方案(特定解决方案中的所有项目)。 在同一台机器上的其他项目/解决方案中,您应该包含相同的T4模板参考。 所以它在你看来并不是全球性的……

您可以做的最好的事情是使用此T4模板创建自定义Visual Studio项目模板,这样可以更轻松地将此默认T4模板添加到您的解决方案/项目中。 这是全球性的,你可以通过T4来实现。

也许您应该阅读这篇关于您的自定义类型的MSDN条目:
如何:自定义对象层代码生成(实体数据模型设计器)

我不知道是否有可能改变默认代码生成。

我想你可以创建一个从ObjectContext生成派生类的.tt ,而不是试图修改默认代码生成。 这样您可以根据需要为其命名并实现默认构造函数。

就像是:

 <#=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组件。 这里有更多信息。