相关疑难解决方法(0)

使用Dapper映射SqlGeography

我有实体"点",包含Id,文本和地理坐标.

CREATE TABLE [Point] (
    [Id] INT IDENTITY CONSTRAINT [PK_Point_Id] PRIMARY KEY,
    [Coords] GEOGRAPHY NOT NULL,
    [Text] NVARCHAR(32) NOT NULL,
    [CreationDate] DATETIME NOT NULL,
    [IsDeleted] BIT NOT NULL DEFAULT(0)
)

CREATE PROCEDURE [InsertPoint]
    @text NVARCHAR(MAX),
    @coords GEOGRAPHY
AS BEGIN
    INSERT INTO [Point](Text, Coords, CreationDate)
    VALUES(@text, @coords, GETUTCDATE())    
    SELECT * FROM [Point] WHERE [Id] = SCOPE_IDENTITY()
END
Run Code Online (Sandbox Code Playgroud)

这是表的sql代码和插入的存储过程.我有使用短小精悍的课程:

public class DapperRequester : IDisposable {
    private readonly SqlConnection _connection;
    private SqlTransaction _transaction;

    public DapperRequester(string connectionString) {
        _connection = new SqlConnection(connectionString);
        _connection.Open();
    } …
Run Code Online (Sandbox Code Playgroud)

c# sql-server mapping sqlgeography dapper

9
推荐指数
1
解决办法
4220
查看次数

使用Dapper和SQL Spatial Types作为参数

我有一个基本上必须做这样的查询的系统:

SELECT * FROM MyTable WHERE @parameter.STIntersects(MyGeometryColumn)
Run Code Online (Sandbox Code Playgroud)

使用vanilla SQL参数时这很简单,你只需要以非典型的方式创建参数(其中builder变量是我用来创建矩形的SqlGeometryBuilder):

command.Parameters.Add(new SqlParameter
{
    UdtTypeName = "geometry",
    Value = builder.ConstructedGeometry,
    ParameterName = "@paremeter"
});
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试使用dapper这样做时,我得到一个错误,它无法弄清楚如何将其用作参数.任何有这个工作的人,或者有关如何启用此功能的任何指示?我有一个解决方法,但这涉及使用字符串表示并将其转换为我的SQL查询中的几何类型.我真的不想那样.

要回答评论,我得到的错误是'Microsoft.SqlServer.Types.SqlGeometry类型的成员参数不能用作参数值'.换句话说,dapper不知道如何将SqlGeometry对象作为参数处理.

orm spatial sql-server-2008 dapper

8
推荐指数
2
解决办法
4215
查看次数

标签 统计

dapper ×2

c# ×1

mapping ×1

orm ×1

spatial ×1

sql-server ×1

sql-server-2008 ×1

sqlgeography ×1