很简单,当使用Code First并为每个层次结构表创建一个表时,我的直觉是Discriminator
字段应该被编入索引,因为它将用于过滤几乎每个查询的数据。
为什么EF不向Discriminator
字段添加索引?
答案 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"));