5

我正在尝试使用 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?如何正确使用匿名参数?

4

1 回答 1

8

匿名参数是提供者特定的。据我所知,MSSQL 提供程序没有使用它们(如果我错了,请纠正我)。

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

CreateIndex("Users",
         new string[] { "RatingId", "CreatedAt", "Id", "Email", "DomainId" },
         false,
         "IX_RatingId_CreatedAt"
       );
于 2012-05-13T11:06:53.880 回答