有没有办法用 EntityFrameworkCore 2.2 声明空间索引?
Is there a way to declare a Spatial Index with EntityFrameworkCore 2.2?
我正在使用 Entity Framework Core 2.2 与 NetTopologySuite 1.15.1 和 SQL 服务器 2016。拥有类型为 IPoint
的列非常有用,我想在其上创建索引。
我有这个table
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: Column 'Coordinates' in table 'data.Locations' is of a type that is invalid for use as a key column in an index or statistics.
SQL 服务器 是否 支持 geography
.
类型列的索引
我认为原因可能是 EF Core 正在尝试创建 regular index rather than spatial one。
是我做错了什么还是不支持?有没有办法告诉 EF Core 它应该创建空间索引?
查看 EF Core 的问题日志,似乎尚不支持创建空间索引。
https://github.com/aspnet/EntityFrameworkCore/issues/12538
问题 1100 支持 SQL 服务器和 SQL Lite 上的空间数据类型。
我正在使用 Entity Framework Core 2.2 与 NetTopologySuite 1.15.1 和 SQL 服务器 2016。拥有类型为 IPoint
的列非常有用,我想在其上创建索引。
我有这个table
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: Column 'Coordinates' in table 'data.Locations' is of a type that is invalid for use as a key column in an index or statistics.
SQL 服务器 是否 支持 geography
.
我认为原因可能是 EF Core 正在尝试创建 regular index rather than spatial one。
是我做错了什么还是不支持?有没有办法告诉 EF Core 它应该创建空间索引?
查看 EF Core 的问题日志,似乎尚不支持创建空间索引。
https://github.com/aspnet/EntityFrameworkCore/issues/12538
问题 1100 支持 SQL 服务器和 SQL Lite 上的空间数据类型。