在EF Core中生成複合唯一約束/索引

ef-fluent-api ef-migrations entity-framework entity-framework-core

我需要一個複合唯一約束來實現我的實體的Name屬性,它對於每個Category (它有一個FK)是唯一的。

所以這樣的事情:

entityTypeBuilder
  .HasIndex(i => new { i.Name, i.Category.Id })
  .IsUnique();

但是由於Category.Id導航屬性,當我生成遷移時,這會失敗。

我知道我可以將值硬編碼為字符串,但我不想丟失靜態類型。

我有什麼選擇?

一般承認的答案

在相關實體上為CategoryId的CategoryId添加外鍵,並在索引構建器中使用該外鍵而不是導航屬性。


熱門答案

只要知道了shadow屬性名稱,就可以使用(至少在EF Core 1.1.0中)基於字符串的HasIndex方法重載

public virtual IndexBuilder HasIndex(params string[] propertyNames)

例如

entityTypeBuilder
  .HasIndex("Name", "CategoryId")
  .IsUnique();

HasAlternateKey

entityTypeBuilder
  .HasAlternateKey("Name", "CategoryId");


Related

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