Gibt es eine Möglichkeit, einen Index für eine Eigenschaft / Spalte mit Code-First zu erstellen, anstatt den neuen zu verwenden IndexAttribute
?
112
Gibt es eine Möglichkeit, einen Index für eine Eigenschaft / Spalte mit Code-First zu erstellen, anstatt den neuen zu verwenden IndexAttribute
?
Antworten:
Nun, 26.10.2017 Entity Framework 6.2 wurde offiziell veröffentlicht . Es bietet die Möglichkeit , Indizes einfach über die Fluent API zu definieren. Wie es zu verwenden ist, wurde bereits in der Beta von 6.2 angekündigt .
Jetzt können Sie die
HasIndex()
Methode verwenden, gefolgt von der Frage,IsUnique()
ob es sich um einen eindeutigen Index handeln soll.Nur ein kleiner Vergleich (vorher / nachher) Beispiel:
Es ist auch möglich, den Index als gruppiert mit zu markieren
.IsClustered()
.EDIT # 1
Es wurde ein Beispiel für einen mehrspaltigen Index und zusätzliche Informationen zum Markieren eines Index als Cluster hinzugefügt.
EDIT # 2
Als zusätzliche Information ist es in EF Core 2.1 genau das gleiche wie in EF 6.2.
Hier ist der MS Doc Artcile als Referenz.
quelle
new
. Ich werde es reparieren.Derzeit gibt es keine "erstklassige Unterstützung" für die Erstellung eines Index über die fließende API. Sie können jedoch über die fließende API Eigenschaften als Attribute aus der Annotation-API markieren. Auf diese Weise können Sie das
Index
Attribut über eine fließende Schnittstelle hinzufügen .Hier sind einige Beispiele aus dem Arbeitselement von der Issues-Site für EF.
Erstellen Sie einen Index für eine einzelne Spalte:
Mehrere Indizes für eine einzelne Spalte:
Mehrspaltige Indizes:
Wenn Sie die oben genannten Techniken verwenden, werden beim Erstellen Ihrer nächsten Migration
.CreateIndex()
automatisch Aufrufe für Sie in IhrerUp()
Funktion erstellt (oder automatisch in der Datenbank erstellt, wenn Sie keine Migrationen verwenden).quelle
.Primarykey(x=>x.id,clustered:false)
methodHasAnnotation
Methode ausprobiert und es gibt KEINE solche Methode. Aber ich habe eine Methode gefunden, deren NameHasColumnAnnotation
die von Ihnen angegebenen Parameter akzeptiert. Müssen Sie Ihre Antwort aktualisieren oder irre ich mich?Ich habe einige Erweiterungsmethoden erstellt und sie in ein Nuget-Paket eingeschlossen, um dies viel einfacher zu machen.
Installieren Sie das
EntityFramework.IndexingExtensions
Nuget-Paket.Dann können Sie Folgendes tun:
Das Projekt und der Quellcode sind hier . Genießen!
quelle
IndexAttribute
Klasse nicht verfügbar gemacht , sodass ich es nicht in meine Bibliothek aufnehmen kann.Ohne expliziten Namen:
Mit einem bestimmten Namen:
quelle
EntityFramework
. Es ist in dieser Baugruppe enthalten. nur verwirrt über die NS.instead of using the new IndexAttribute
Haben Sie es bemerkt?Ab EF 6.1 wird das Attribut
[Index]
unterstützt.Verwenden Sie
[Index(IsUnique = true)]
für einen eindeutigen Index.Hier ist der Link von Microsoft
quelle
[Index("IX_BlogIdAndRating", 2)]
public int Rating { get; set; }
[Index("IX_BlogIdAndRating", 1)]
public int BlogId { get; set; }
hier die Referenz von MicrosoftEntity Framework 6
Und füge hinzu mit:
quelle
Sie können den INDEX-Datenanmerkungscode First Data Annotations verwenden
quelle
Wenn Sie keine Attribute für Ihre POCOs verwenden möchten, können Sie dies jederzeit wie folgt tun:
Sie können diese Anweisung in Ihrer benutzerdefinierten
DbInitializer
abgeleiteten Klasse ausführen . Ich kenne jedoch keine Fluent API-Methode, um dies zu tun.quelle
Ich schreibe eine Erweiterungsmethode für die Verwendung in fließendem EF, um zusätzlichen Code zu vermeiden:
dann benutze es so:
oder so, wenn der Index einige Konfigurationen benötigt:
quelle
Sie können eines davon verwenden
// Indizes
oder
quelle