实体框架代码优先 - 每个层次结构表 - 是否应该将Discriminator字段编入索引?

时间:2016-04-27 09:56:50

标签: asp.net-mvc entity-framework

很简单,当使用Code First并为每个层次结构表创建一个表时,我的直觉是Discriminator字段应该被编入索引,因为它将用于过滤几乎每个查询的数据。

为什么EF不向Discriminator字段添加索引?

2 个答案:

答案 0 :(得分:1)

并非总是如此。你可以在这里找到一些人谈论这个问题:https://github.com/aspnet/EntityFramework/issues/4030

现在,如果您判断创建索引会更好,您可以使用nuget Package EntityFramework.DiscriminatorIndex中的约定传递,如下所述:https://bytenosso.blogspot.com.br/2016/10/entity-framework-discriminator-index.html

答案 1 :(得分:0)

我不知道我的问题是否正确,但它是ef的默认行为。在TPH映射方案中,继承层次结构中的所有类型都映射到单个表。鉴别器列用于标识每行的类型。使用Code First创建模型时,TPH是参与继承层次结构的类型的默认策略。 并使用Fluent Api

修改此行为
modelBuilder.Entity<Course>()  
.Map<Course>(m => m.Requires("Type").HasValue("Course"))  
.Map<OnsiteCourse>(m => m.Requires("Type").HasValue("OnsiteCourse"));