【问题标题】:How to customize DbContext properties names in Entity Framework and stop being overwritted?如何在实体框架中自定义 DbContext 属性名称并停止被覆盖?
【发布时间】:2012-10-14 14:56:15
【问题描述】:

EF 从我的 edmx 文件(数据库优先)自动生成 DbContext 类,并使用表名作为所有这些 DbContext 属性的默认名称(例如:public DbSet<Student> student { get; set; }

如果我在此文件中进行一些更改(例如:将属性名称从 student 重命名为 Students),每次保存模型时我的更改都会丢失,因为 EF 会重新生成 DbContext 类文件。

如何更改此默认行为并能够进行自定义并避免丢失?

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    详细说明 Pawel 所说的内容。EDMX 文件(设计者)是一切的来源。您需要对生成的项目进行的任何更改都应在此处完成。您可以通过部分类添加其他方法或属性,但不能更改现有的..因此必须在源 EDMX 文件中进行更改。

    只需右键单击设计器中的表,然后重命名它。这不会改变底层表的名称(至少在 Database First 逆向工程中,model first 是另一回事)。

    【讨论】:

    • 表名没问题,但是我的实体类中继承自 DbContext 的方法名呢? (在 MyDataModel.Context.cs 中)
    • @Etienne - 什么方法名称? Poco's 被称为 Poco's 是有原因的。他们没有方法。
    • T4 模板给了我一个 MyDataModel.Context.tt,其中包含一个 MyDataModel.Context.cs。在最后一个中,我们定义了公共部分类实体:包含所有方法列表的 DbContext(例如:public DbSet student { get; set; })。在我的存储库中,实例化此实体类(例如:私有实体上下文;)后,我可以使用 context.student 访问我的模型...我想使用 context.Students 访问它...抱歉不能清除...
    • @Etienne - 这些是属性,而不是方法。当你说“实体”时,你通常指的是学生类,它是一个实体,而不是派生的上下文。无论如何,我们已经告诉过你如何改变它。您可以在模型设计器中更改它。
    • 好的,我找到了。在模型设计器中,当您右键单击模型并转到属性时,您拥有 Name 属性,还有我正在寻找的“实体集名称”属性。非常感谢。
    【解决方案2】:

    您需要在 Edmx 文件中更改它 - 您应该能够使用 EF 设计器进行更改

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多