Entity Framework 6.1 - 使用INCLUDE语句创建索引

40

现在,随着Entity Framework 6.1的最新Beta版本中提供了索引功能,是否可以在Code First方法中创建与此SQL语句相等的索引呢?

CREATE NONCLUSTERED INDEX [Sample1]
ON [dbo].[Logs] ([SampleId],[Date])
INCLUDE ([Value])
1个回答

48

严格来说,在Code First Migrations中一直存在这种可能性,因为您可以在迁移中运行SQL:

   public partial class AddIndexes : DbMigration
    {
        private const string IndexName = "IX_LogSamples";

        public override void Up()
        {
            Sql(String.Format(@"CREATE NONCLUSTERED INDEX [{0}]
                               ON [dbo].[Logs] ([SampleId],[Date])
                               INCLUDE ([Value])", IndexName));

        }

        public override void Down()
        {
            DropIndex("dbo.Logs", IndexName);
        }
    }

但我意识到你可能实际上是在问是否可以使用6.1中引入的IndexAttribute创建一个包含Include列的索引 - 答案是“不行”


8
是的,IndexAttribute 就是我想要的。但看起来我们仍然不能拥有好东西 =) - Gapipro
1
需要注意的一点是,虽然这种方法可以工作,因为索引确实被创建了,但在__MigrationHistory中的Model没有任何区别,所以Database.CompatibleWithModel在此迁移之前和之后都将返回true。因此,您可能会意外地运行未索引的数据库。 - AakashM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接