实体框架对SQL空间数据类型的核心支持-DBGeography?

时间:2018-08-04 02:16:45

标签: c# entity-framework-core

我想使用具有SQL Server中某些地理数据的ASP.NET Core Razor Pages制作Web应用程序。当从现有SQL数据库中使用EF Core创建EF模型时,Visual Studio会给出一个错误,提示它不支持Geography数据类型。是否有一种方法可以在使用实体框架或EF Core的ASP.NET Core项目中使用地理等SQL空间数据类型?

This链接显示了一些解决方法,但没有现成的方法。

This link是有关此问题的较旧的帖子。

2 个答案:

答案 0 :(得分:9)

Entity Framework Core的2.2版引入了空间数据支持。它使用NetTopologySuite数据类型并将其映射到geographygeometry SQL Server类型。 您可以通过NuGet安装NetTopologySuite:

Install-Package NetTopologySuite

并且您还将需要以下NuGet包以实现对SQL Server的EF Core空间数据支持:

Install-Package Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite

,并在EF上下文配置中使用UseNetTopologySuite选项:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer(
        @"my connection string",
        x => x.UseNetTopologySuite());
}

然后您可以执行以下操作:

var nearestCity = db.Cities
    .OrderBy(c => c.Location.Distance(currentLocation))
    .FirstOrDefault();

我在Finding Nearby Users with Entity Framework Core Spatial Data博客文章中对此进行了描述。

答案 1 :(得分:1)

我偶然发现了您的帖子以及您提到的第一个链接。就在几天前,还发布了EntityFrameworkCore 2.2.0的预览版,该版本应该支持SQL Server中的空间数据类型。

请参见https://github.com/aspnet/EntityFrameworkCore/issues/1100#issuecomment-417618315和以下注释。

我还没有尝试过它,它可能无法100%工作,但是肯定值得一试。