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

Hei*_*ich 6 c# entity-framework-core

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

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

此链接是一个较旧的帖子,涉及这个问题。

Mar*_*pic 12

Entity Framework Core 2.2版引入了空间数据支持。它采用NetTopologySuite的数据的类型和它们映射到geographygeometrySQL Server的类型。您可以通过NuGet安装NetTopologySuite:

Install-Package NetTopologySuite
Run Code Online (Sandbox Code Playgroud)

而且,您还将需要以下NuGet包来获得对SQL Server的EF Core空间数据支持:

Install-Package Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite
Run Code Online (Sandbox Code Playgroud)

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

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

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

var nearestCity = db.Cities
    .OrderBy(c => c.Location.Distance(currentLocation))
    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

我在“ 使用Entity Framework核心空间数据查找附近的用户”博客文章中对此进行了撰写。


Tob*_*ias 1

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

请参阅https://github.com/aspnet/EntityFrameworkCore/issues/1100#issuecomment-417618315和以下评论。

我自己还没有尝试过,它可能不是 100% 有效,但它确实值得一试。