【问题标题】:How to create a clustered index when using code-first migration with Entity Framework and SQL Server使用 Entity Framework 和 SQL Server 的代码优先迁移时如何创建聚集索引
【发布时间】:2013-04-27 10:00:53
【问题描述】:

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

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

【问题讨论】:

    标签: entity-framework asp.net-mvc-4 entity-framework-migrations clustered-index


    【解决方案1】:

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

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

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

    不幸的是,EF doesn't really provide much support for indexes。解决此问题的最佳方法取决于您正在执行的迁移类型。如果您不使用自动迁移,并且想要向新表(即您有迁移的表)添加索引,则可以修改迁移中生成的 CreateTable 语句以添加索引。这个技术用在one of the Entity Framework tutorials(搜索Index找到它)

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

    【讨论】:

    • 谢谢你,理查德。你基本上回答了我开始担心的问题,但我想我会设法调用 CREATE INDEX 并从那里获取它:)
    • Entity Framework 6.1 已添加此功能。
    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2013-02-27
    • 2020-09-09
    相关资源
    最近更新 更多