【问题标题】:Entity Framework Column attribute isn't changing name实体框架列属性未更改名称
【发布时间】:2018-01-20 02:49:36
【问题描述】:

所以我有一个使用非常规名称 EF 的对象列表,并且在该对象中我定义了对包含该列表的上层对象的引用。一切都很顺利,直到我看到它为我生成的名称,我尝试使用 [Column] 属性更改它,但失败了。

代码:

[Column("CompanyFK")]
public Company CompanyFK { get; set; }

生成的代码:

public override void Up()
  {
       AddColumn("dbo.AspNetUsers", "CompanyFK_CompanyPK", c => c.Int());
       CreateIndex("dbo.AspNetUsers", "CompanyFK_CompanyPK");
       AddForeignKey("dbo.AspNetUsers", "CompanyFK_CompanyPK", "dbo.Company", "CompanyPK");
  }

【问题讨论】:

  • “失败”是怎么回事?请发布错误/异常详细信息。
  • 不会失败,更像是行不通。正如您从生成的代码中看到的那样,AddColumn 将生成一个与我所看到的名称不同的名称。
  • 您确定在 AddColumn 方法中添加了正确的列名??
  • Column 属性不在导航属性上。

标签: c# entity-framework


【解决方案1】:

Column 属性改变了类的属性和表的列之间的映射。它不会重命名数据库中的现有列。

首先使用代码将启用创建新表,但默认情况下它不会修改您已经创建的数据库对象。

因此,如果您使用的是现有表,则需要自己重命名该列或编写迁移代码。

【讨论】:

    【解决方案2】:

    在调用 AddColumn() 时,您将添加一个名为“CompanyFK_CompanyPK”的列。

    如果您希望将该字段称为“CompanyFK”(如您的属性名称),则将对 AddColumn 的调用更改为

       AddColumn("dbo.AspNetUsers", "CompanyFK", c => c.Int());
    

    现在您的属性将匹配列名,因此您可以删除 [Column] 属性。

    【讨论】:

    • 我希望在数据库中将该列命名为 CompanyFK。
    • 我将在这一天的剩余时间里离开实体框架。它让我很生气,像创建一个 1:M 与自定义名称的链接这样简单的事情不想工作。我今天要处理其他事情,稍后我会回来,您的答案看起来正确,如果是,我会在休息后将其标记为正确。
    • 好的。当你有这种感觉时,休息一下是个好主意。我们都经历过这个——我相信你会弄清楚的。
    • @BaileyMiller - 运气好吗?
    • 我实际上不得不经历很多垃圾,但我最终擦除了我的数据库,我正在使用 Fluent Api 慢慢重建它,因为它允许我进行我想要的更改。
    【解决方案3】:

    使用模型构建器来自定义您的映射,就像在这个答案中一样:

    Mapping a foreign key with a custom column name

    希望对你有帮助

    胡安

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多