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