risposta

1

Risposta breve - No, non lo è. Ho visto questo riferimento tangenzialmente in blogs e non ho trovato esempi concreti di implementazione. Sembra essere correlato al fatto che gli indici spaziali sono indici filtrati, che non sono supportati in Entity Framework.

Come supporto per la mia risposta ho costruito un'app console POC con la versione più recente di Entity Framework (6.1). Ho preso le seguenti operazioni

  1. creato un modello che ha avuto una proprietà di tipo DbGeography
  2. abilitati migrazioni automatiche
  3. Ran Update-Database verbose assicurare la migrazione con l'aggiunta di un indice è stato eseguito. L'indice utilizzato il seguente:

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

Non indici sono stati creati, ma nessuno dei due ha fatto l'incidente app. Potrei provare le permutazioni su questo, ma il mio esempio sembra seguire la convenzione del framework di entità: Official Fluent Documentation

0

L'unico modo che conosco per farlo è attraverso una migrazione "personalizzata". In EF6, aggiungo una migrazione (nell'esempio sotto è chiamata "V1"), risultante in una nuova migrazione con metodi vuoti Up() e Down(). È quindi possibile aggiungere comandi SQL personalizzati a questi metodi prima di eseguire update-database per inserirli nel flusso di migrazione "normale".

È possibile modificare una migrazione esistente per aggiungere queste funzionalità, ma in pratica preferisco mantenere separate le mie migrazioni automaticamente da quelle personalizzate.

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]"); 
    } 
} 

Non un metodo ideale, ma non troppo male dal momento che seguono il modello "normale" migrazioni per EF.

Problemi correlati