Sql server Microsoft.SqlServer.Types(14.0)来访问其地理功能

Sql server Microsoft.SqlServer.Types(14.0)来访问其地理功能,sql-server,Sql Server,我们有一个使用Microsoft.SqlServer.Types(14.0)库的MVC核心(3)应用程序。 然而,这个库主要是为.NET4设计的,而不是为core设计的。在MVC核心(3)应用程序中是否有一个等效的库 非常感谢。已添加到EF Core 2.2中。然后通过PostgreSQL、SQL Server和SQLite的NetTopologySuite包 这允许您使用空间属性类型,并让EF Core将它们映射到SQL Server类型,例如: class Country { pub

我们有一个使用Microsoft.SqlServer.Types(14.0)库的MVC核心(3)应用程序。 然而,这个库主要是为.NET4设计的,而不是为core设计的。在MVC核心(3)应用程序中是否有一个等效的库

非常感谢。

已添加到EF Core 2.2中。然后通过PostgreSQL、SQL Server和SQLite的NetTopologySuite包

这允许您使用空间属性类型,并让EF Core将它们映射到SQL Server类型,例如:

class Country
{
    public int CountryID { get; set; }

    public string CountryName { get; set; }

    // Database includes both Polygon and MultiPolygon values
    public Geometry Border { get; set; }
}
EF Core还可以在查询中使用空间函数:

var nearestCity = db.Cities
    .OrderBy(c => c.Location.Distance(currentLocation))
    .FirstOrDefault();
对于原始ADO.NET查询,您可以直接使用,例如:

var geometryReader = new SqlServerBytesReader { IsGeography = true };
var bytes = dataReader.GetSqlBytes(columnOrdinal).Value;
var geometry = geometryReader.Read(bytes);


已添加到EF Core 2.2中。后来通过NetTopologySuite软件包,投票关闭的人可能不理解这个问题。这不是一个要求图书馆推荐的问题。谢谢你的回复。如何执行以下操作:var dist=geog.STDistance(SqlGeography.STPointFromText(新的SqlChars(“点”(“+d.经度+”)”+d.纬度+”),4326)).Value;很抱歉感谢您提到它包含在核心2.2中,为我的问题排序。我们正在使用std公式,但我们的距离一直为零。我们应该在哪里指定srid?var geo=新的GeometryFactory();var point1=geo.CreatePoint(新坐标(double.Parse(lng,CultureInfo.InvariantCulture),double.Parse(lat,CultureInfo.InvariantCulture));var point2=geo.CreatePoint(新坐标(double.Parse(d.Longitude,CultureInfo.InvariantCulture),double.Parse(d.Latitude,CultureInfo.InvariantCulture));var dist=点1.距离(点2)@用户2981411这是一个问题,不是SQL Server或EF核心问题。NTS是一种OSS,在任何情况下,SRID都是在创建几何体时指定的,而不是在尝试使用几何体执行计算时指定的。使用接受SRID的方法之一
var geometry = new Point(-122.129797, 47.640049) { SRID = 4326 };
var geometryWriter = new SqlServerBytesWriter { IsGeography = true };
var bytes = geometryWriter.Write(geometry);
var parameter = command.Parameters
    .AddWithValue(parameterName, new SqlBytes(bytes));