如何更改使用Entity Framework Power Tools生成的生成的类名

时间:2013-03-15 17:08:08

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

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

我现在打算将Entity Framework用于我们项目的一些新的特殊要求,而不会干扰旧的存储库逻辑。 我使用了EF Power工具Beta 3和Reverse Engineered来自Visual Studio的数据库表,但是生成的类与我现有的一些存储库类冲突,这些存储库类与数据库中的相应表具有相同的名称,使得项目无法编译。 我查看了this教程

但这告诉我们将“tbl”前缀附加到表名而不更改生成的类名。 然而,我自己试图在模板中更改生成的类名(存在于CodeTemplates \ ReverseEngineerCodeFirst下) 但他们仍然会产生冲突。

我的问题是我应该怎样做才能达到预期的结果(与项目中现有的课程没有冲突),或者我应该采取其他一些替代方案?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

这是:

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

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

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

然后我做了以下事情:

  1. 在Context.tt文件中替换

    using <#= code.EscapeNamespace(efHost.MappingNamespace) #>;
    
    namespace <#= code.EscapeNamespace(efHost.Namespace) #>
    
  2. <#
        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命名空间中。好事是......它有效!