我想使用具有SQL Server中某些地理数据的ASP.NET Core Razor Pages制作Web应用程序。当从现有SQL数据库中使用EF Core创建EF模型时,Visual Studio会给出一个错误,提示它不支持Geography数据类型。是否有一种方法可以在使用实体框架或EF Core的ASP.NET Core项目中使用地理等SQL空间数据类型?
This链接显示了一些解决方法,但没有现成的方法。
This link是有关此问题的较旧的帖子。
答案 0 :(得分:9)
Entity Framework Core的2.2版引入了空间数据支持。它使用NetTopologySuite数据类型并将其映射到geography
或geometry
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%工作,但是肯定值得一试。