簡體   English   中英

實體框架代碼首先在創建1:n關系時在數據庫中生成兩個外鍵列

[英]Entity Framework Code First generates two foreign key columns in database when creating a 1:n relationship

我想基於創建關系的命名約定 ,使用Entity Framework創建1:n關系。 我正在使用codefirst。 實體框架忽略了約定,並且alwas創建了兩個外鍵列,而不是只創建一個:

  • StreamWorkerUser_Id(我只想要這個列)
  • StreamWorkerUser_Id1

配置類配置如下:

AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;

我正在使用Microsoft.Identity Framework,其中包含所有模型的自定義類。

我的DbContext類就像下面這么簡單。

public class StreamWorkerDataContext : IdentityDbContext<StreamWorkerUser, StreamWorkerRole, int, StreamWorkerUserLogin, StreamWorkerUserRole, StreamWorkerUserClaim>
{
    public DbSet<Task> Tasks { get; set; }
}

Task模型:

public class Task : StreamWorkerEntity
{
    public StreamWorkerUser StreamWorkerUser { get; set; }
}

StreamWorkerUser模型:

public class StreamWorkerUser : IdentityUser<int, StreamWorkerUserLogin, StreamWorkerUserRole, StreamWorkerUserClaim>
    {
        public virtual List<Task> Tasks { get; set; } // also tested ICollection
    }

Task類繼承自此基類型,這里還定義了StreamWorkerUser類型的兩個屬性(但這些列在數據庫中正確生成。):

public class StreamWorkerEntity
{
    [Key]
    public int Id { get; set; }
    public DateTimeOffset Created { get; set; }
    public DateTimeOffset Updated { get; set; }
    public StreamWorkerUser Creator { get; set; }
    public StreamWorkerUser LastEditor { get; set; }
}

CreatorLastEditor屬性是否有可能擾亂數據庫遷移?

我是否正確理解慣例?

更多信息:

  • 實體框架版本6.1.3
  • Microsoft.AspNet.Identity.Core 2.2.1
  • Microsoft.AspNet.Identity.EntityFramework 2.2.1
  • ASP.NET 4 MVC 5
  • Azure雲中的SQL Server
  • C#6.0
  • .NET Framework 4.5.2
  • 所有這些代碼都在類庫中

所以在這種情況下你可能會認為EF:

 public StreamWorkerUser Creator { get; set; }
 public StreamWorkerUser LastEditor { get; set; }

將創建creator_id和lasteditor_id,但它沒有,因為EF取了類名並制作了StreamWorkerUser_Id和StreamWorkerUser_Id1,因為已經使用了StreamWorkerUser_Id。 默認情況下,如果按類(而不是int字段)創建關系,則EF會根據類名(而不是字段名稱)生成其列名。

如果要為這些FK指定列名,您可以執行以下操作:

    public int CreatorId { get; set; } //this field name will be column name
    [ForeignKey("StreamWorkerUser")]
    public StreamWorkerUser Creator { get; set; }

    public int EditorId { get; set; } //this field name will also be column name
    [ForeignKey("StreamWorkerUser")]
    public StreamWorkerUser Editor { get; set; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM