sql >> データベース >  >> RDS >> Sqlserver

Dapper を SQL 空間型と共にパラメーターとして使用する

    奇妙で素晴らしい 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 メソッドを追加することにより、複数のパラメーターを処理するように簡単に拡張できます。



    1. SQL:行が同じテーブル内の基準ではないトランザクションを選択します

    2. LinqからSQLへのDateTime値はローカルです(種類=未指定)-UTCにするにはどうすればよいですか?

    3. 一意でないインデックスはレコードの重複を回避できますか

    4. きめ細かいアクセス制御