2016-12-15 44 views
1

我使用EF核心1.1和創建了一個一對一的關係,一個例子:EF核心1.1 FK生成唯一索引一到一個

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

現在,使用添加遷移我的DbContext它會生成以下內容:

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

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

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

+0

如果表中可以包含重複項,那麼它不是'一對一',而是'一對多',你不覺得嗎? –

回答

2

如果要使索引支持外鍵非唯一性,則需要在流利api中的FK屬性上配置索引並將其設置爲非唯一。 在你的例子中,在OnModelCreating()方法中添加下面的代碼行會給你想要的結果。

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

雖然具有用於一對一的關係在FK屬性重複值可以具有在運行時不期望的影響,同時固定向上導航屬性。

+0

這不適合我。它仍然創造了獨特的索引。 –

+0

我們是否可以添加一對一的映射功能,我們可以將FK指定爲非唯一索引,如果情況如此,EF會自動限制級聯刪除? –

+0

順便說一句,沒有OnModelConfiguring(),所以我假設你在談論OnModelCreating()。如果沒有,我在DbContext中看到的唯一的其他方法是OnConfiguring(DbContextOptionsBuilder optionsBuilder),我不認爲這就是你正在談論的內容。 –