11

我有一个MessageModel带有时间戳属性的消息创建时间。我想在这个长属性上创建一个聚集索引。我希望在执行查询以获取比某个时间戳更新的所有消息时实现查询加速。时间戳值在创建后永远不会更改。Id我目前在 int属性上有一个常规索引。

如何在 ASP.NET MVC 4.5 中使用实体框架代码优先迁移在模型属性上添加聚集索引?

4

1 回答 1

24

更新:EntityFramework 6.1 引入了[Index]可用于在任意字段上指定索引的属性。例子:

public class MessageModel 
{
    [Index(IsClustered = true, IsUnique = false)]
    public long Timestamp { get; set; }
}

对于旧版本的实体框架,我将在下面留下我的原始答案:

不幸的是,EF并没有真正为索引提供太多支持。解决此问题的最佳方法取决于您正在执行的迁移类型。如果您没有使用自动迁移并且您想为新表添加索引(即您有迁移的表),那么您可以修改迁移中生成的 CreateTable 语句以添加索引。此技术用于实体框架教程之一(搜索索引以找到它)

如果您正在使用自动迁移(或表已经存在),那么您仍然可以使用旧式 SQL 来创建索引 - 生成迁移,然后修改您的代码以包含一个普通的旧CREATE INDEX语句。

于 2013-04-27T16:42:46.087 回答