使用实体框架和SQL Server进行代码优先迁移时如何创建聚簇索引

Sin*_*dre 11 entity-framework clustered-index asp.net-mvc-4 ef-migrations

我有一个MessageModel带有timestamp属性的消息创建时间.我想在这个long属性上创建一个聚簇索引.我希望在进行查询时获得查询加速,以获得比某个时间戳更新的所有消息.创建后,时间戳值永远不会更改.我目前在int Id属性上有一个常规索引.

如何在ASP.NET MVC 4.5中使用Entity Framework代码优先迁移在models属性上添加聚簇索引?

Ric*_*ard 24

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

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

对于旧版本的Entity Framework,我将在下面留下我的原始答案:

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

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

  • 此功能已添加到Entity Framework 6.1中. (2认同)