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

时间:2011-02-04 16:16:50

标签: c# entity-framework templates entity-framework-4

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

我只是想将类名从<#=code.Escape(container)#>修改为Entities,并将默认连接字符串更改为name=Default

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

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

更新:我仍然不知道该怎么做。

2 个答案:

答案 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

相关问题