11

Mam atrybut MessageModel z atrybutem znacznika czasu, kiedy wiadomość została utworzona. Chciałbym utworzyć indeks klastrowy na ten długi atrybut. Mam nadzieję na przyspieszenie zapytania podczas wykonywania zapytania, aby uzyskać wszystkie wiadomości nowsze niż określony znacznik czasu. Wartość znacznika czasu nigdy nie ulega zmianie po utworzeniu. Obecnie mam regularny indeks w atrybucie int Id.Tworzenie indeksu klastrowego podczas korzystania z pierwszej migracji kodu za pomocą Entity Framework i SQL Server

Jak dodać indeks klastrowany do atrybutu models przy użyciu migracji kodu programu Entity Framework w ASP.NET MVC 4.5?

Odpowiedz

24

UPDATE: EntityFramework 6.1 wprowadzono atrybut [Index] który może być wykorzystany do określenia indeksu na dowolnej dziedzinie. Przykład:

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

Dla starszych wersji Entity Framework, odejdę mój oryginalny odpowiedź poniżej:

niestety EF doesn't really provide much support for indexes. Najlepszy sposób podejścia do tego zależy od rodzaju migracji, które robisz. Jeśli nie używasz automatycznych migracji i chcesz dodać indeks do nowej tabeli (np. Do której masz migrację), możesz zmodyfikować wygenerowaną instrukcję CreateTable w migracji, aby dodać indeksy. Technika ta jest stosowana w one of the Entity Framework tutorials (wyszukiwanie Index go znaleźć)

Jeśli pomocą automatycznych migracji (lub tabela już istnieje), to nadal można używać starego typu SQL, aby utworzyć indeks - wygeneruje migrację , następnie zmodyfikuj swój kod tak, aby zawierał zwykłą starą instrukcję CREATE INDEX.

+0

Dziękuję, Richard. Zasadniczo odpowiedziałaś na to, co zaczynałem się obawiać, ale domyślam się, że uda mi się zadzwonić do CREATE INDEX i zabrać ją stamtąd :) – Sindre

+2

Ta funkcja została dodana do Entity Framework 6.1. – Richard

Powiązane problemy