4

エンティティのNameプロパティに複合ユニーク制約が必要です。これはCategory(FKを持つ)に対してユニークです。EFコアで複合ユニーク制約/インデックスを生成

したがって、このような何か:

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

しかし、私は理由Category.Idナビゲーションプロパティの移行を生成するとき、これは失敗します。

私は文字列として値をハードコードできることは知っていますが、静的な型指定を失いたくはありません。

どのようなオプションがありますか?

答えて

4

問題のエンティティにカテゴリCategoryIdの外部キーを追加し、ナビゲーションプロパティではなくインデックスビルダでそのキーを使用します。

+0

うんそれは厄介です。それは唯一の選択肢ですか? – grokky

+0

なぜあなたはそれが面倒だと思いますか?外部キーのプロパティを追加することは面倒ではありません、なぜあなたはそれをどう思いますか? @grokky – kizilsu

+1

@grokky - 私は、外来のキープロパティを定義するのが面倒だと主張したいと思います。 [EFドキュメントはそれをお勧めします](https://docs.microsoft.com/en-us/ef/core/modeling/relationships#no-foreign-key-property)、シャドープロパティを導入したくない。 – steamrolla

3

文字列がベースのシャドウ・プロパティ名を知っているとすぐに、あなたが使用することができます(少なくともEFコア1.1.0で)HasIndex方法overload

public virtual IndexBuilder HasIndex(params string[] propertyNames) 

例えば

entityTypeBuilder 
    .HasIndex("Name", "CategoryId" }) 
    .IsUnique(); 
HasAlternateKeyのための同じ

entityTypeBuilder 
    .HasAlternateKey("Name", "CategoryId" }); 
+0

ええ、それは私が今やっていることですが、私は質問で言ったように、あなたは静的なタイピングを失います。たぶんこれが唯一の方法です。 – grokky

関連する問題