奇妙で素晴らしい DB 固有のパラメーターを実装するための鍵はすべて、SqlMapper.IDynamicParameters
に集約されます。
この単純なインターフェースには、単一のエンドポイントがあります:
パブリック インターフェイス IDynamicParameters{ void AddParameters(IDbCommand コマンド);}
プレ>Dapper には、
DynamicParameters
という名前のこのインターフェースの DB ジェネリック実装が既にあります。 これにより、出力と戻り値を処理できます。この空間的なものをエミュレートするには、次のようなものを試します:
public class SpatialParam :SqlMapper.IDynamicParameters{ 文字列名;オブジェクト値; public SpatialParam(string name, object val) { this.name =name; this.val =val; } public void AddParameters(IDbCommand コマンド、SqlMapper.Identity ID) { var sqlCommand =(SqlCommand)command; sqlCommand.Parameters.Add(new SqlParameter { UdtTypeName ="geometry", Value =val, ParameterName =name }); }}コード> プレ>
使い方:
cnn.Query("SELECT * FROM MyTable WHERE @parameter.STIntersects(MyGeometryColumn)", new SpatialParam("@parameter", builder.ConstructedGeometry));
プレ>このインターフェイスの単純な実装は、1 つのパラメーターのみを処理しますが、コンストラクターから渡すか、ヘルパー AddParameter メソッドを追加することにより、複数のパラメーターを処理するように簡単に拡張できます。