基本的に次のようなクエリを実行する必要があるシステムがあります。
SELECT * FROM MyTable WHERE @parameter.STIntersects(MyGeometryColumn)
通常の SQL パラメーターを使用する場合、これを行うのは非常に簡単です。パラメーターを非典型的な方法で作成するだけです (ビルダー変数は、四角形を作成するために使用する SqlGeometryBuilder です)。
command.Parameters.Add(new SqlParameter
{
UdtTypeName = "geometry",
Value = builder.ConstructedGeometry,
ParameterName = "@paremeter"
});
今、dapper を使用してこれを実行しようとすると、これをパラメーターとして使用する方法がわからないというエラーが表示されます。これを機能させた人、またはこれを有効にする方法についての指針はありますか? 回避策はありますが、それには文字列表現を使用し、それを SQL クエリでジオメトリ タイプに変換する必要があります。私は本当にそれをしたくありません。
コメントに答えると、「Microsoft.SqlServer.Types.SqlGeometry 型のメンバー パラメータはパラメータ値として使用できません」というエラーが表示されます。つまり、dapper は SqlGeometry オブジェクトをパラメーターとして処理する方法を知りません。