【问题标题】:Entity Framework: Why do the templates no longer generate ".designer.cs" source files实体框架:为什么模板不再生成“.designer.cs”源文件
【发布时间】:2012-12-01 13:19:54
【问题描述】:

Entity Framework 3.5/4.0 中的默认类型生成会发出“Xxxx.designer.cs”源文件中的每个类型(其中“Xxxx”是正在生成的类型的名称)。然后,这允许开发人员生成他自己的“Xxxx.cs”源文件,在那里可以进行进一步的实现,或者可以将属性添加到元数据类等。

最近可用的 T4 模板(POCO、Self Tracking 等),包括 VS2012 中的默认类型生成,都生成“Xxxx.cs”本身,没有“.designer”后缀。

我知道重写 T4 模板的行为以在文件名中发出“.designer”很容易,但是我在这里遗漏了一些东西,实际上我们不鼓励通过部分定义来扩展这些类?

在我最近生成自我跟踪实体的项目中,我发现我必须重命名发出的文件,以便我可以使用元数据类属性以及 .Equals(object) 和 .GetHashcode() 的覆盖来扩展定义(否则 EF 无法正确检测重复)例如。

我是否遗漏了什么,我们现在应该将发出的部分类保留原样,或者这仅仅是一个疏忽,你们中的大多数人还必须重命名正在发出的源文件吗?

【问题讨论】:

    标签: visual-studio entity-framework visual-studio-2012 t4


    【解决方案1】:

    代码生成策略在 VS2012 中发生了变化。在生成的代码使用基于 EntityObject 的实体和从 ObjectContext 类派生的上下文类之前。 VS2012 默认生成 POCO 实体和 DbContext 派生上下文。如果您仍然想要基于 ObjectContext 的上下文和基于 EntityObject 的实体,您需要:

    1. 右键单击设计器图面并选择属性
    2. 将“代码生成策略”从“无”更改为“默认”
    3. 从您的解决方案中删除 .tt 文件以避免同时出现上下文和重复实体。

    【讨论】:

    • 我想你可能误解了这个问题。我不是在尝试恢复 ObjectContext,我是在问为什么源文件命名策略已更改为不再包含“.designer”。
    • 是的,显然误解了这个问题。这些文件不再由设计器生成(注意代码生成策略设置为 None),而是由调用 T4 模板处理的 VS 生成。 T4 处理器创建一个与正在处理的 T4 模板同名的文件。您可以尝试重命名 T4 文件 - 如果这样做,您可能需要重命名 edmx 文件(我对此不确定)。重命名不是为了阻止扩展生成的类。
    • 谢谢;这是我试图理解的最后一点。我知道我可以通过编辑 T4 模板来重命名生成的源文件(并且已经多次这样做了)——我只是想知道我现在是否违反了规定。
    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    相关资源
    最近更新 更多