实体框架生成的类不在我需要的命名空间中,有没有办法在不重新生成的情况下更改它使用的命名空间?

Posted

技术标签:

【中文标题】实体框架生成的类不在我需要的命名空间中,有没有办法在不重新生成的情况下更改它使用的命名空间?【英文标题】:Entity Framework generated classes are not in the namespace I require, is there a way of changing the namespace it uses without regenerating? 【发布时间】:2012-12-13 09:53:19 【问题描述】:

如果我需要重新生成,应该在哪里指定命名空间。我正在尝试使用 Models 命名空间中的部分类,但它们不匹配。

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

namespace projectname

   #region Contexts

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

  

当我在模型文件夹中添加一个类时,

namespace projectname.Models


    public partial class MyClass
    
     //etc, etc 
    

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

我想要一些关于解决此问题的正确方法的建议,最好是更新 E.F. 类,以便它们存在于 projectname.Models 命名空间中,但我不知道如何去做。

【问题讨论】:

你能告诉我们一些你的代码吗? 【参考方案1】:

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

我会发布屏幕截图,但缺乏声誉。

【讨论】:

赞成,因为这个答案特别提到了“.tt”文件。您可以更改“.edmx”的自定义工具命名空间,但这对生成的文件没有任何作用。您必须更改 T4 脚本(上下文和/或实体)的自定义工具命名空间。【参考方案2】:

IIRC,如果您使用实体数据模型,您应该能够直接通过一个或多个 xml 文件更改命名空间(您可能必须为所有各种存储和概念模型更改它)。甚至可能有一些方法可以在设计器中进行更改.. 看起来很简单。

其实解决办法可能就在这里:

Generated Code Overview (Entity Data Model Designer)(参见自定义工具命名空间)

【讨论】:

您的答案是正确的,但是当我运行自定义工具时它什么也没做,所以最终我不得不手动更改文件以匹配命名空间。很遗憾,我没有 15 点声望点,所以无法投票给你。 注意,您应该更改 .tt 文件的自定义工具名称,而不是 .edmx 好收获。我正在更新 .edmx 而不是 Model.tt @JohnFleming 但是您可以接受正确的答案!【参考方案3】: 在解决方案资源管理器中右键单击项目中的 .edmx 文件并选择属性 在 VS 属性窗格中,细化自定义工具命名空间 输入您想要的完整 CLR 命名空间 重建项目

【讨论】:

【参考方案4】:

自动生成的类的命名空间将继承自 VS 项目设置(如果您在那里更改它甚至会更改)。当然,您应该将“自定义工具命名空间”属性设为空。 (刚刚用VS2013和EF6.1测试过) 与一直是 pita 的设置文件不同 :)

对于旧版本,有一个关于手动更改的好视频:

https://youtu.be/B7Cqc9F0Ih8

【讨论】:

以上是关于实体框架生成的类不在我需要的命名空间中,有没有办法在不重新生成的情况下更改它使用的命名空间?的主要内容,如果未能解决你的问题,请参考以下文章

在实体框架中更改命名空间

实体框架更改生成的多对多表的名称

有没有办法在实体类和 package-info.java 中定义命名查询?

是否可以删除命名空间中的所有Google Cloud Datastore Kinds?

我应该在另一个命名空间中使用实体框架 DBContext 的部分类吗

如何永久重命名 C# 项目的 Properties 命名空间