11

У меня есть MessageModel с атрибутом timestamp, когда сообщение было создано. Я хотел бы сделать кластеризованный индекс этого длинного атрибута. Я надеюсь добиться ускорения запроса при выполнении запроса, чтобы получить все сообщения, более новые, чем определенные временные метки. Значение timestamp никогда не изменяется после создания. В настоящее время у меня есть регулярный индекс по атрибуту int Id.Как создать кластерный индекс при использовании первой миграции кода с Entity Framework и SQL Server

Как добавить кластерный индекс для атрибута моделей, используя Первичный переход с использованием Entity Framework в ASP.NET MVC 4.5?

ответ

24

UPDATE: EntityFramework 6.1 представил атрибут [Index], который может использоваться для указания индекса в произвольном поле. Пример:

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

Для более старых версий Entity Framework, я оставлю мой первоначальный ответ ниже:

К сожалению EF doesn't really provide much support for indexes. Лучший способ приблизиться к этому зависит от типа миграций, которые вы делаете. Если вы не используете автоматическую миграцию и хотите добавить индекс в новую таблицу (т. Е. У вас есть миграция), вы можете изменить сгенерированный оператор CreateTable в миграции для добавления индексов. Этот метод используется в one of the Entity Framework tutorials (поиск индекса, чтобы найти его)

Если являются с помощью автоматических миграций (или таблица уже существует), то вы все равно можете использовать старый стиль SQL для создания индекса - генерировать миграции , затем измените свой код, чтобы включить простой старый оператор CREATE INDEX.

+0

Спасибо, Ричард. Вы в основном ответили, что я начинаю бояться, но, я думаю, мне удастся вызвать CREATE INDEX и взять его оттуда :) – Sindre

+2

Эта функция была добавлена ​​в Entity Framework 6.1. – Richard

 Смежные вопросы

  • Нет связанных вопросов^_^