我正在使用EF Core 2.2.0,并且试图调用参数类型为Geometry
的存储过程。当我调用存储过程时,出现此错误:
指定的类型未在目标服务器上注册。 NetTopologySuite.Geometries.Polygon,NetTopologySuite,版本= 1.15.2.0,Culture = neutral,PublicKeyToken = f580a05016ebada1。
我这样调用存储过程:
// Create IGeometry with NetTopologySuite.Features.Feature
IGeometry zone= feature.Geometry;
var zoneParameter = new SqlParameter
{
ParameterName = "@zone",
Value = zone,
SqlDbType = SqlDbType.Udt,
UdtTypeName = "Geometry"
};
return _context.Query<ReportDTO>()
.FromSql("mySP {0}", zoneParameter)
.ToList();
我的存储过程就是这样:
ALTER PROCEDURE mySP
@zone GEOMETRY
AS
BEGIN
-- do something
END
SQL Server版本是:Microsoft SQL Azure(RTM)-12.0.2000.8
这是EF Core上不支持的吗,还是我做错了什么?
答案 0 :(得分:0)
你应该转换几何
var geometryWriter = new SqlServerBytesWriter {IsGeography = false};
var geometryBytes = geometryWriter.Write(zone);
var zoneParameter = new SqlParameter
{
ParameterName = "@zone",
Value = geometryBytes,
SqlDbType = SqlDbType.Udt,
UdtTypeName = "Geometry"
};
return _context.Query<ReportDTO>()
.FromSql("mySP {0}", zoneParameter)
.ToList();