实体框架筛选索引

Eli*_*eth 25 entity-framework ef-code-first entity-framework-6

我使用EF 6.1.x Code First.

我已经读过EF最新版本不支持带过滤器表达式的索引.

SO上也没有解决方案:

EF 6.1独特的可空指数

一年后,使用Code First和DbMigrations使过滤器索引工作的工作方式是什么?

CREATE UNIQUE NONCLUSTERED INDEX [IX_DefaultLanguageApplicationId] ON [dbo].[Languages]
(
    [IsDefaultLanguage] ASC,
    [ApplicationId] ASC,
)
WHERE ([IsDefaultLanguage]=(1))
Run Code Online (Sandbox Code Playgroud)

Col*_*lin 29

在EF 6.1中,使用Code First和DbMigrations进行此工作的工作方式是使用类中的Sql方法DbMigration:

public partial class AddIndexes : DbMigration
{
    public override void Up()
    {
        Sql(@"CREATE UNIQUE NONCLUSTERED INDEX
             [IX_DefaultLanguageApplicationId] ON [dbo].[Languages]
             (
                [IsDefaultLanguage] ASC,
                [ApplicationId] ASC 
             )
             WHERE ([IsDefaultLanguage]=(1))");

    }

    public override void Down()
    {
        DropIndex("dbo.Languages", "IX_DefaultLanguageApplicationId");
    }
}
Run Code Online (Sandbox Code Playgroud)

但我意识到你可能会问你是否可以使用6.1中引入的IndexAttribute创建索引,但是使用Filter - 答案是"否"

几乎是一个副本:Entity Framework 6.1 - 使用INCLUDE语句创建索引


ilm*_*max 5

请注意,现在EF core 2.1.X通过上的HasFilter扩展添加了对过滤索引的内置支持IndexBuilder,因此不再需要自定义实现。

看到这个更多的细节