使用CreateIndex和匿名参数进行EF 4.3代码迁移

时间:2012-05-07 21:58:49

标签: entity-framework ef-code-first entity-framework-4.3 ef-migrations

我正在尝试使用EF代码迁移创建索引。索引看起来像:

CREATE INDEX [IX_RatingId_CreatedAt] ON [Users] 
(
[RatingId] ASC,
[CreatedAt] ASC
)
INCLUDE (Id, Email, DomainId)

我到目前为止的代码是:

CreateIndex("Users",
             new string[] { "RatingId", "CreatedAt" },
             false,
             "IX_RatingId_CreatedAt"
           );

这将为我创建索引,但不包括列。 CreateIndex方法有一个覆盖,它接受一个名为anonymousArguments的东西。我无法找到关于它的更多信息所以我尝试了类似的东西:

CreateIndex("Users",
             new string[] { "RatingId", "CreatedAt" },
             false,
             "IX_RatingId_CreatedAt",
             new { INCLUDE = "(Id, Email, DomainId)" });

没有例外,但它没有用。

是否可以使用CreateIndex方法创建上述索引,还是必须使用Sql方法在迁移中写出T-SQL?如何正确使用匿名参数?

1 个答案:

答案 0 :(得分:7)

匿名参数是特定于提供者的。据我所知,MSSQL提供商并未使用它们(如果我错了,请纠正我。)

CreateIndex没有内置的重载来处理包含的列。要么必须回退到手动SQL,要么可以在所有列上创建索引。

CreateIndex("Users",
         new string[] { "RatingId", "CreatedAt", "Id", "Email", "DomainId" },
         false,
         "IX_RatingId_CreatedAt"
       );