繁体   English   中英

如何在EF核心中调用具有空间参数的存储过程

[英]How to call stored procedure that has spatial parameter in EF core

我正在使用 EF Core 2.2.0 并且我试图调用一个具有Geometry类型参数的存储过程。 当我调用存储过程时,出现此错误:

指定类型未在目标服务器上注册。 NetTopologySuite.Geometries.Polygon,NetTopologySuite,版本=1.15.2.0,文化=中性,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 上不支持还是我做错了什么?

你应该转换几何

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM