Entity Framework Core支持SQL空间数据类型 - DBGeography吗?

11
我想使用ASP.NET Core Razor Pages创建一个包含SQL Server中某些地理数据的Web应用程序。在使用来自现有SQL数据库的EF Core创建EF模型时,Visual Studio会出现错误,指出它不支持地理数据类型。是否有一种方法可以在ASP.NET Core项目中使用实体框架或EF Core使用SQL空间数据类型,如地理信息?此链接显示了一些解决方法,但没有什么开箱即用的东西。此链接是一篇旧文章,处理这个问题。

1
不,Entity Framework Core 没有支持。您需要使用 Entity Framework 6(如果您的目标是 .NET Framework,则可以在 ASP.NET Core 中使用它)。 - Camilo Terevinto
1
相关问题:https://dev59.com/TlkT5IYBdhLWcg3wWONA。EF Core仍不支持空间类型;您需要使用Microsoft.SpatialSystem.Spatial来实现。 - Tetsuya Yamamoto
@CamiloTerevinto,如果针对.NET Framework,EF6是否可以与ASP.NET Core无缝配合?在这样做的情况下,您是否仍然可以使用Docker在其他平台上部署ASP.NET Core? - Heinrich
1
不行,因为你需要针对.NET Framework(即仅限Windows)。 - Camilo Terevinto
2个回答

23

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

Install-Package NetTopologySuite

同时,您还需要以下 NuGet 包来支持 EF Core 空间数据在 SQL Server 上的使用:

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();

我在我的使用Entity Framework Core空间数据查找附近用户博客文章中写到了这个。


你是不是想安装 Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite 包? - Jamal Osman
您的博客链接无法访问。 - David Thielen

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接