10 votes

Existe-t-il un moyen de déclarer un index spatial avec EntityFrameworkCore 2.2 ?

J'utilise Entity Framework Core 2.2 con NetTopologySuite 1.15.1 y SQL Server 2016 . Avoir une colonne de type IPoint fonctionne très bien jusqu'au moment où je veux créer un index dessus.

J'ai ce tableau

public class Location
{
    public int Id { get; set; }

    public IPoint Coordinates { get; set; }

    public static void Register(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Location>(entity => entity.HasIndex(x => new {x.Coordinates}));
    }
}

Et le noyau EF le gère bien en générant une migration, produisant ainsi le code suivant :

migrationBuilder.CreateIndex(
    name: "IX_Locations_Coordinates",
    schema: "data",
    table: "Locations",
    column: "Coordinates");

Cependant, dès que j'essaie d'appliquer la migration à la base de données, SqlException est lancé avec le message suivant

SqlException : La colonne 'Coordinates' de la table 'data.Locations' est d'un type non valide pour être utilisée comme colonne clé dans un index ou une statistique.

SQL Server fait supportent les index sur les colonnes de type geography .

Je pense que la raison pourrait être que EF Core essaye de créer une indice ordinaire plutôt que spatial un .

Est-ce que je fais quelque chose de mal ou est-ce que ce n'est pas supporté ? Existe-t-il un moyen d'indiquer à EF Core qu'il doit créer un index spatial ?

11voto

Barry Points 18913

En regardant le journal des problèmes pour EF Core, il apparaît que la création d'index spatiaux n'est pas encore supportée.

https://github.com/aspnet/EntityFrameworkCore/issues/12538

github

Numéro 1100 est le support des types de données spatiales sur SQL Server et SQL Lite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X