【问题标题】:How to change generated class names generated using Entity Framework Power Tools如何更改使用 Entity Framework Power Tools 生成的类名
【发布时间】:2013-03-15 17:08:07
【问题描述】:

大家正在开发一个 Asp.Net MVC 项目,该项目已经在使用存储库模式从 MS SQL Server 数据库中获取数据。

我现在打算将实体框架用于我们项目的一些新的特殊需求,而不会干扰旧的存储库逻辑。 我使用了 EF Power 工具 Beta 3 并从 Visual Studio 对我的数据库表进行了逆向工程,但生成的类与我现有的一些存储库类冲突,这些存储库类与数据库中的对应表同名,导致项目无法编译。 我看过this教程

但这说明了在表名后附加“tbl”前缀,而不是更改生成的类名。 但是,我自己尝试更改模板中生成的类名(位于 CodeTemplates\ReverseEngineerCodeFirst 下 但它们仍然会产生冲突。

我的问题是我应该怎么做才能达到我的预期结果(与项目中的现有类没有冲突)或者我应该完全采用其他替代方案?感谢您的帮助。

【问题讨论】:

    标签: asp.net database entity-framework database-first visual-studio-power-tools


    【解决方案1】:

    我不知道如何让该工具执行您所要求的操作,但是如何更改生成文件中的命名空间,这样重复的名称就无关紧要了?

    【讨论】:

      【解决方案2】:

      好的,考虑到@jlew 的建议,我找到了一种解决方法,是的,它点击了:

      这里是:

      首先,我使用从以下链接下载的自定义模板覆盖了“CodeTemplates/ReverseEngineerCodeFirst”文件夹下生成的默认模板:

      http://romiller.com/2012/05/09/customizing-reverse-engineer-code-first-in-the-ef-power-tools/

      (注意:这样做是为了使用 Data Annotations 进行配置,而不是 Fluent API,因此使用 Data Annotations 完成列和表映射。有关详细信息,请参阅上面的链接。

      然后我做了以下操作:

      1. 在 Context.tt 文件中替换

        using <#= code.EscapeNamespace(efHost.MappingNamespace) #>;
        
        namespace <#= code.EscapeNamespace(efHost.Namespace) #>
        

      <#
          var hostMapNamespace = code.EscapeNamespace(efHost.MappingNamespace);
          hostMapNamespace = hostMapNamespace.Replace(".Models", ".ModelsEF");
      
          var hostNamespace = code.EscapeNamespace(efHost.Namespace);
          hostNamespace = hostNamespace.Replace(".Models", ".ModelsEF");
      #>
      using <#= hostMapNamespace #>;
      
      namespace <#= hostNamespace #>
      

      2- 在 Entity.tt 文件中替换

          namespace <#= code.EscapeNamespace(efHost.Namespace) #>
      

      <#
          var hostNamespace = code.EscapeNamespace(efHost.Namespace);
          hostNamespace = hostNamespace.Replace(".Models", ".ModelsEF");
      #>
      namespace <#= hostNamespace #>
      

      3- 在 Mapping.tt 文件中替换

          namespace <#= code.EscapeNamespace(efHost.Namespace) #>
      

      <#
          var hostMapNamespace = code.EscapeNamespace(efHost.Namespace);
          hostMapNamespace = hostMapNamespace.Replace(".Models", ".ModelsEF");
      #>
      namespace <#= hostMapNamespace #>
      

      简而言之,我对自定义模板中的命名空间生成进行了一些更改,以避免与任何现有的项目类发生冲突,尤其是在 Models 命名空间中。好消息是……它有效!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多