有没有一种方法可以使用EntityFrameworkCore 2.2声明空间索引?

时间:2019-01-30 09:00:18

标签: c# sql-server entity-framework-core sqlgeography nettopologysuite

我正在将 Entity Framework Core 2.2 NetTopologySuite 1.15.1 SQL Server 2016 一起使用。拥有类型IPoint的列非常适合我要在其上创建索引的点。

我有这张桌子

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

并且EF核心在生成迁移的同时很好地处理了它,从而产生了以下代码:

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

但是,一旦我尝试将迁移应用于数据库,就会出现以下消息,抛出SqlException

  

SqlException:表“ data.Locations”中的“坐标”列的类型无效,无法用作索引或统计信息中的键列。

SQL Server 确实支持类型为geography的列上的索引。

我相信原因可能是EF Core试图创建regular index而不是spatial one

我做错什么了吗?还是不被支持?有没有办法告诉EF Core应该创建空间索引?

1 个答案:

答案 0 :(得分:5)

从EF Core的问题日志来看,似乎尚不支持创建空间索引。

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

github

问题1100支持SQL Server和SQL Lite上的空间数据类型。