我需要一個複合唯一約束,用於我的實體Name
屬性,該屬性每Category
(對於它具有FK)是唯一的。生成複合唯一約束/索引,在EF核心
因此,像這樣:
entityTypeBuilder
.HasIndex(i => new { i.Name, i.Category.Id })
.IsUnique();
但是這時候我產生遷移失敗,因爲Category.Id
導航屬性的。
我知道我可以將值作爲字符串進行硬編碼,但我不想丟失靜態類型。
我有什麼選擇?
我需要一個複合唯一約束,用於我的實體Name
屬性,該屬性每Category
(對於它具有FK)是唯一的。生成複合唯一約束/索引,在EF核心
因此,像這樣:
entityTypeBuilder
.HasIndex(i => new { i.Name, i.Category.Id })
.IsUnique();
但是這時候我產生遷移失敗,因爲Category.Id
導航屬性的。
我知道我可以將值作爲字符串進行硬編碼,但我不想丟失靜態類型。
我有什麼選擇?
爲有問題的實體添加CategoryId
類別的外鍵,並將其用於索引構建器而不是導航屬性。
只要你知道陰影屬性名稱,你可以使用(至少在EF核心1.1.0)的基於字符串的方法HasIndex
overload
public virtual IndexBuilder HasIndex(params string[] propertyNames)
例如
entityTypeBuilder
.HasIndex("Name", "CategoryId" })
.IsUnique();
同爲HasAlternateKey
:
entityTypeBuilder
.HasAlternateKey("Name", "CategoryId" });
是的,這就是我現在正在做的,正如我在問題中所說的那樣,你失去了靜態打字。也許這是唯一的方法。 – grokky
呀但這是凌亂。這是唯一的選擇嗎? – grokky
你爲什麼覺得這很混亂?添加一個外鍵屬性並不混亂,你爲什麼這麼想? @grokky – kizilsu
@grokky - 我認爲不定義外鍵屬性是凌亂的。 [EF文檔推薦它](https://docs.microsoft.com/en-us/ef/core/modeling/relationships#no-foreign-key-property),並且,我寧可不引入陰影屬性。 – steamrolla