EF Core 1.1在FK上一對一地生成唯一索引

.net-core entity-framework-core

我正在使用EF Core 1.1並創建了我的一對一關係,例如:

EntityTypeBuilder<Account>
   .HasOne(a => a.Customer)
   .WithOne(a => a.Account)
   .HasForeignKey<Account>(a => a.CustomerId)

現在在我的DbContext上使用Add-Migration,它會生成以下內容:

migrationBuilder.CreateIndex(
   name: "IX_Accounts_CustomerId",
   table: "Accounts",
   column: "CustomerId",
   unique: true);

有沒有辦法在Fluent中指定從索引中刪除唯一性?我不介意生成索引,但出於我的目的,它不能是唯一的。原因是這些表是可審計的,因此可能存在重複數據(在PK之外)。因此,如果沒有對該FK實體進行任何更改(但可能在記錄中的其他位置發生更改),則記錄可以包含相同的FK ID。

TL; DR任何使Fluent中的索引在一對一FK中不唯一的方法嗎?

熱門答案

如果要使支持外鍵的索引非唯一,則需要在fluent api中配置FK屬性的索引並將其設置為非唯一。在您的示例中,在OnModelCreating()方法中添加以下代碼OnModelCreating()為您提供所需的結果。

modelBuilder.Entity<Account>().HasIndex(e => e.CustomerId).IsUnique(false);

雖然在FK屬性中具有一對一關係的重複值,但在修復導航屬性時可能會在運行時產生不良影響。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因