EFコアで複合ユニーク制約/インデックスを生成する

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は合法ですか? はい、理由を学ぶ