コードファーストを使用して階層テーブルごとにテーブルを作成する場合、ほとんどすべてのクエリでデータをフィルタリングするために使用されるため、Discriminator
フィールドにインデックスを付ける必要があります。エンティティフレームワークコードファースト - 階層ごとのテーブル - ディスクリミネータフィールドにインデックスを付ける必要がありますか?
なぜEFはDiscriminator
フィールドにインデックスを追加しませんか?
コードファーストを使用して階層テーブルごとにテーブルを作成する場合、ほとんどすべてのクエリでデータをフィルタリングするために使用されるため、Discriminator
フィールドにインデックスを付ける必要があります。エンティティフレームワークコードファースト - 階層ごとのテーブル - ディスクリミネータフィールドにインデックスを付ける必要がありますか?
なぜEFはDiscriminator
フィールドにインデックスを追加しませんか?
あなたの質問が正しいかどうかわかりませんが、そのデフォルト動作はefです。 TPHマッピングシナリオでは、継承階層のすべてのタイプが単一のテーブルにマップされます。識別器列は、各行のタイプを識別するために使用されます。コードファーストでモデルを作成する場合、TPHは継承階層に参加するタイプのデフォルト戦略です。 Fluent APIを使用してこの動作を変更した場合
modelBuilder.Entity<Course>()
.Map<Course>(m => m.Requires("Type").HasValue("Course"))
.Map<OnsiteCourse>(m => m.Requires("Type").HasValue("OnsiteCourse"));
いつもそうとは限りません。あなたはここでこれについて話している人々を見つけることができます:https://github.com/aspnet/EntityFramework/issues/4030。今
、あなたはそれがインデックスを作成する方がよいでしょう判断した場合、ここで説明するように、あなたがnuget Package EntityFramework.DiscriminatorIndex
で大会の配信を使用することができますが:https://bytenosso.blogspot.com.br/2016/10/entity-framework-discriminator-index.html
かなり私が求めていたものを、私は識別カラムがあることを理解していません単一の表にマップされたクラスを区別することができます。私が期待しているのは、そのテーブルのすべての単一のクエリがdiscriminatorカラムをwhere句の一部として使用するため、そのカラムのインデックスを作成することです。 – RemarkLima
discriminator値自体を使用したいですか? Discriminator列はコードファーストで内部的に使用され、継承マッピングの観点からその値を読み書きすることはできません。 –
[link](http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph)このブログの投稿弁別子列の概念を理解するのに非常に役立ちます。 –