我正在将 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应该创建空间索引?
答案 0 :(得分:5)
从EF Core的问题日志来看,似乎尚不支持创建空间索引。
https://github.com/aspnet/EntityFrameworkCore/issues/12538
问题1100支持SQL Server和SQL Lite上的空间数据类型。