Czy istnieje sposób na utworzenie indeksu we właściwości / kolumnie przy użyciu najpierw kodu, zamiast używania nowego IndexAttribute
?
112
Czy istnieje sposób na utworzenie indeksu we właściwości / kolumnie przy użyciu najpierw kodu, zamiast używania nowego IndexAttribute
?
Odpowiedzi:
Otóż 26.10.2017 Entity Framework 6.2 został oficjalnie wydany . Obejmuje możliwość łatwego definiowania indeksów poprzez Fluent API. To, że ma być używany, zostało już ogłoszone w wersji beta 6.2.
Teraz możesz użyć
HasIndex()
metody, a poIsUnique()
niej, jeśli powinien to być unikalny indeks.Tylko małe porównanie (przed / po) przykład:
Możliwe jest również oznaczenie indeksu jako skupionego z
.IsClustered()
.EDYCJA # 1
Dodano przykład dla indeksu wielokolumnowego i dodatkowe informacje, jak oznaczyć indeks jako klastrowy.
EDYCJA # 2
Jako dodatkowe informacje w EF Core 2,1 jest teraz dokładnie taki sam jak w EF 6,2.
Oto artykuł MS Doc jako odniesienie.
źródło
new
. Naprawię to.Obecnie nie ma „pierwszej klasy obsługi” tworzenia indeksu za pośrednictwem interfejsu API Fluent, ale za pomocą interfejsu Fluent API można oznaczyć właściwości jako mające atrybuty z interfejsu API adnotacji. Umożliwi to dodanie
Index
atrybutu za pośrednictwem płynnego interfejsu.Oto kilka przykładów z elementu roboczego z witryny problemy dla EF.
Utwórz indeks w jednej kolumnie:
Wiele indeksów w jednej kolumnie:
Indeksy wielokolumnowe:
Użycie powyższych technik spowoduje, że
.CreateIndex()
wywołania będą automatycznie tworzone dla Ciebie w TwojejUp()
funkcji podczas tworzenia szkieletu następnej migracji (lub zostaną automatycznie utworzone w bazie danych, jeśli nie używasz migracji).źródło
.Primarykey(x=>x.id,clustered:false)
methodHasAnnotation
metodę i NIE ma takiej metody. ale znalazłem metodę, której nazwaHasColumnAnnotation
akceptuje podane przez Ciebie parametry. Czy musisz zaktualizować swoją odpowiedź, czy się mylę?Utworzyłem kilka metod rozszerzających i opakowałem je w pakiet nuget, aby to znacznie ułatwić.
Zainstaluj
EntityFramework.IndexingExtensions
pakiet NuGet.Następnie możesz wykonać następujące czynności:
Projekt i kod źródłowy są tutaj . Cieszyć się!
źródło
IndexAttribute
klasę EF , więc nie mogę go umieścić w mojej bibliotece.Bez wyraźnej nazwy:
O określonej nazwie:
źródło
EntityFramework
. jest zawarty w tym zestawie. po prostu zdezorientowany NS.instead of using the new IndexAttribute
, zauważyłeś to?Od wersji EF 6.1 atrybut
[Index]
jest obsługiwany.Użyj
[Index(IsUnique = true)]
dla unikalnego indeksu.Oto link od firmy Microsoft
źródło
[Index("IX_BlogIdAndRating", 2)]
public int Rating { get; set; }
[Index("IX_BlogIdAndRating", 1)]
public int BlogId { get; set; }
tutaj odniesienie od firmy MicrosoftEntity Framework 6
I dodaj używając:
źródło
Możesz użyć adnotacji danych INDEX Code First Adnotacje danych
źródło
Jeśli nie chcesz używać atrybutów na swoich POCO, zawsze możesz to zrobić w następujący sposób:
Tę instrukcję można wykonać w niestandardowej
DbInitializer
klasie pochodnej. Nie znam jednak żadnego sposobu na zrobienie tego przez Fluent API.źródło
Piszę metodę rozszerzenia do użycia w płynnym EF, aby uniknąć dodatkowego kodu:
następnie użyj tego w ten sposób:
lub w ten sposób, jeśli indeks wymaga pewnych konfiguracji:
źródło
Możesz użyć jednego z tych
// Indeksy
lub
źródło