Antwort

1

Kurze Antwort- Nein, ist es nicht. Ich habe gesehen, dass dies durch blogs tangential referenziert wurde, und habe keine konkreten Beispiele für die Implementierung gefunden. Es scheint damit in Zusammenhang zu stehen, dass räumliche Indizes gefilterte Indizes sind, die in Entity Framework nicht unterstützt werden.

Als Unterstützung für meine Antwort habe ich eine POC-Konsolen-App mit der neuesten Version von Entity Framework (6.1) erstellt. Ich nahm die folgenden Schritte

  1. ein Modell geschaffen, das eine Eigenschaft des Typs hatte DbGeography
  2. Aktiviert automatische Migrationen
  3. Ran-Update-Datenbank -verbose Migration mit dem Zusatz eines Index Versicherung durchgeführt wurde. Der Index verwendet die folgenden:

    modelBuilder.Entity<LocationEntity>().Property(t => t.Coordinates).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("ix_locationentity_coordinates")));

keine Indizes erstellt wurden, aber auch nicht die App zum Absturz bringen. Ich könnte versuchen, Permutationen auf diese, aber mein Beispiel scheint die Konvention der Entität Rahmen zu folgen: Official Fluent Documentation

0

Die einzige Möglichkeit, die ich weiß, dies zu tun, ist durch eine "benutzerdefinierte" Migration. In EF6 füge ich eine Migration hinzu (im Beispiel darunter heißt sie "V1"), was zu einer neuen Migration mit leeren Up() und Down() Methoden führt. Sie können diesen Methoden dann benutzerdefinierte SQL-Befehle hinzufügen, bevor Sie update-database ausführen, um diese in den "normalen" Migrationsablauf zu versetzen.

Es ist möglich, eine vorhandene Migration zu ändern, um diese Funktionen hinzuzufügen, aber ich bevorzuge in der Praxis, meine automatisch gerüsteten Migrationen getrennt von meinen benutzerdefinierten zu halten.

public partial class V1 : DbMigration 
{ 
    public override void Up() 
    { 
     Sql("CREATE SPATIAL INDEX [IX_UserProfileAddresses_Location] ON [dbo].[UserProfileAddresses](Location)"); 
    } 

    public override void Down() 
    { 
     Sql("DROP INDEX [IX_UserProfileAddresses_Location] ON [dbo].[UserProfileAddresses]"); 
    } 
} 

Keine ideale Methode, aber nicht so schlecht, da es dem "normalen" Migrationsmuster für EF folgt.

Verwandte Themen