2016-04-27 7 views
0

コードファーストを使用して階層テーブルごとにテーブルを作成する場合、ほとんどすべてのクエリでデータをフィルタリングするために使用されるため、Discriminatorフィールドにインデックスを付ける必要があります。エンティティフレームワークコードファースト - 階層ごとのテーブル - ディスクリミネータフィールドにインデックスを付ける必要がありますか?

なぜEFはDiscriminatorフィールドにインデックスを追加しませんか?

答えて

0

あなたの質問が正しいかどうかわかりませんが、そのデフォルト動作はefです。 TPHマッピングシナリオでは、継承階層のすべてのタイプが単一のテーブルにマップされます。識別器列は、各行のタイプを識別するために使用されます。コードファーストでモデルを作成する場合、TPHは継承階層に参加するタイプのデフォルト戦略です。 Fluent APIを使用してこの動作を変更した場合

modelBuilder.Entity<Course>() 
.Map<Course>(m => m.Requires("Type").HasValue("Course")) 
.Map<OnsiteCourse>(m => m.Requires("Type").HasValue("OnsiteCourse")); 
+0

かなり私が求めていたものを、私は識別カラムがあることを理解していません単一の表にマップされたクラスを区別することができます。私が期待しているのは、そのテーブルのすべての単一のクエリがdiscriminatorカラムをwhere句の一部として使用するため、そのカラムのインデックスを作成することです。 – RemarkLima

+0

discriminator値自体を使用したいですか? Discriminator列はコードファーストで内部的に使用され、継承マッピングの観点からその値を読み書きすることはできません。 –

+0

[link](http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph)このブログの投稿弁別子列の概念を理解するのに非常に役立ちます。 –

1

いつもそうとは限りません。あなたはここでこれについて話している人々を見つけることができます:https://github.com/aspnet/EntityFramework/issues/4030。今

、あなたはそれがインデックスを作成する方がよいでしょう判断した場合、ここで説明するように、あなたがnuget Package EntityFramework.DiscriminatorIndexで大会の配信を使用することができますが:https://bytenosso.blogspot.com.br/2016/10/entity-framework-discriminator-index.html