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

C# 如何调用EF核中具有空间参数的存储过程,c#,sql-server,.net-core,entity-framework-core-2.2,C#,Sql Server,.net Core,Entity Framework Core 2.2,我使用的是EF Core 2.2.0,我试图调用一个存储过程,该存储过程的参数类型为Geometry。调用存储过程时,出现以下错误: 指定的类型未在目标服务器上注册。NetTopologySuite.Geometries.Polygon,NetTopologySuite,版本=1.15.2.0,区域性=neutral,PublicKeyToken=f580a05016ebada1 我这样调用存储过程: // Create IGeometry with NetTopologySuite.Featu

我使用的是EF Core 2.2.0,我试图调用一个存储过程,该存储过程的参数类型为
Geometry
。调用存储过程时,出现以下错误:

指定的类型未在目标服务器上注册。NetTopologySuite.Geometries.Polygon,NetTopologySuite,版本=1.15.2.0,区域性=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();
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();
var geometryWriter=newsqlserverbyteswriter{IsGeography=false};
var geometryBytes=geometryWriter.Write(区域);
var zoneParameter=新的SqlParameter
{
ParameterName=“@zone”,
值=几何字节,
SqlDbType=SqlDbType.Udt,
UdtTypeName=“几何体”
};
返回_context.Query()
.FromSql(“mySP{0}”,区域参数)
.ToList();

您应该转换几何图形

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();
var geometryWriter=newsqlserverbyteswriter{IsGeography=false};
var geometryBytes=geometryWriter.Write(区域);
var zoneParameter=新的SqlParameter
{
ParameterName=“@zone”,
值=几何字节,
SqlDbType=SqlDbType.Udt,
UdtTypeName=“几何体”
};
返回_context.Query()
.FromSql(“mySP{0}”,区域参数)
.ToList();