Есть ли способ объявить пространственный индекс с EntityFrameworkCore 2.2?
Я использую 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 пытается создать обычный, а не пространственный индекс.
Я что-то делаю не так или просто не поддерживается? Есть ли способ сказать EF Core, что он должен создавать пространственный индекс?
1 ответ
Глядя на журнал проблем для EF Core, кажется, что создание пространственных индексов еще не поддерживается.
https://github.com/aspnet/EntityFrameworkCore/issues/12538
Проблема 1100 - поддержка пространственных типов данных на SQL Server и SQL Lite.