实体框架生成的类不在我需要的命名空间中,是否有一种方法可以更改它使用的命名空间而无需重新生成?

Joh*_*ing 16 entity-framework namespaces visual-studio asp.net-mvc-4

如果我需要重新生成指定命名空间的位置.我试图在Models命名空间中使用部分类,但它们不匹配.

下面简化的代码片段是生成实体框架类的地方

namespace projectname
{
   #region Contexts

   /// <summary>
  /// No Metadata Documentation available.
  /// </summary>
  public partial class MyClass
  {

  }
}
Run Code Online (Sandbox Code Playgroud)

当我向我的模型文件夹添加一个类时,

namespace projectname.Models
{

    public partial class MyClass
    {
     //etc, etc 
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,当我尝试使用它们时,命名空间不匹配会导致问题,因为编译器同时看到了projectname.Models.MyClass和projectname.MyClass.

我想就修正这个问题的正确方法提出一些建议,最好是更新EF类,使它们存在于projectname.Models命名空间中,但我不知道如何解决它.

小智 12

根据Roman O的注释,可以通过更新文本转换(.tt)文件的"自定义工具命名空间"属性来更改命名空间,该文件将生成的实体类(在数据库优先方法中)与实体模型(.edmx)文件联系起来.这适用于带有EF 5.0的VS 2012 Express.

我会发布截图,但缺乏声誉.

  • Upvoted,因为这个答案特别提到'.tt'文件.您可以更改'.edmx'的自定义工具命名空间,但这对生成的文件不起作用.您必须更改T4脚本(上下文和/或实体)的自定义工具命名空间. (2认同)

Jay*_*ayC 5

IIRC,如果您使用的是Entity数据模型,您应该能够直接通过xml文件或文件更改命名空间(您可能需要为所有各种存储和概念模型更改它).甚至可能有一些方法可以在设计师中改变它......看起来很简单.

实际上,解决方案可能在这里:

生成的代码概述(实体数据模型设计器)(请参阅自定义工具命名空间)

  • 请注意,您应该更改.tt文件的自定义工具名称,而不是.edmx (6认同)