Entity Framework - 更改了生成的 field/column 名称

Entity Framework - changed generated field/column name

我有一个由 Entity Framework (6) 在运行时生成的外键字段。该字段与 interfaces T 字段相关。所以我们最终得到一个名为 InterfaceFieldName_Id 的字段 - 我想将其重命名(最好通过 Fluent API)为 TypeFieldName_Id。我知道如何通过将 FK Id 字段添加到 POCO class 来做到这一点,但我不想那样做。

有没有办法重命名这个生成的字段名称?

您可以流畅地指定列名:

modelBuilder.Entity<YourEntity>() 
         .HasRequired(c => c.InterfaceFieldName) 
         .WithMany(d => d.YourColumnName) 
         .HasForeignKey(c => c.FieldName);

您可以使用 Map 方法重命名模型中未定义的 外键 :

modelBuilder.Entity<Entity1>() 
    .HasRequired(c => c.Entity2NavProperty) 
    .WithMany(t => t.Entity1NavigationProperty) 
    .Map(m => m.MapKey("TypeFieldName_Id"));

如果你的模型中已经有一个代表 FK 的 属性 并且它在你的数据库中被 EF 重命名,那么你应该检查你的 relationship.Code 首先回退到自动引入一个数据库,以防外键 属性 未按惯例发现,并且 none 已配置。如果外键 属性 被命名为 [Target Type Key Name][Target Type Name] + [Target Type Key Name][Navigation Property Name] + [Target Type Key Name],则将按照约定被发现。 现在要明确配置您要使用的 FK 属性,您可以执行以下操作:

 modelBuilder.Entity<Entity1>() 
    .HasRequired(c => c.Entity2NavProperty) 
    .WithMany(t => t.Entity1NavigationProperty)
    .HasForeignKey(d => d.TypeFieldName);

如果您想在数据库中为 TypeFieldName 使用不同的名称,那么您也可以这样做:

modelBuilder.Entity<Entity1>().Property(d=>d.TypeFieldName).HasColumnName("TypeFieldName_Id")