エンティティのName
プロパティに複合一意制約が必要です。これは、Category
ごとに一意です(FKがあります)。
だからこのようなもの:
entityTypeBuilder
.HasIndex(i => new { i.Name, i.Category.Id })
.IsUnique();
しかし、Category.Id
ナビゲーションプロパティが原因で、移行を生成するとこれは失敗します。
値を文字列としてハードコーディングできることは知っていますが、静的型付けを失いたくありません。
どのようなオプションがありますか?
問題のエンティティにカテゴリCategoryId
の外部キーを追加し、ナビゲーションプロパティの代わりにインデックスビルダーで使用します。
シャドウプロパティ名がわかればすぐに、(少なくともEF Core 1.1.0では)文字列ベースのHasIndex
メソッド overload を使用できます。
public virtual IndexBuilder HasIndex(params string[] propertyNames)
例えば.
entityTypeBuilder
.HasIndex("Name", "CategoryId")
.IsUnique();
HasAlternateKey
についても同じです:
entityTypeBuilder
.HasAlternateKey("Name", "CategoryId");