簡體   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