sql >> Databáze >  >> RDS >> Sqlserver

Použití Dapper s SQL Spatial Types jako parametrem

Klíč k implementaci podivných a úžasných parametrů specifických pro DB se scvrkává na SqlMapper.IDynamicParameters

Toto jednoduché rozhraní má jeden koncový bod:

public interface IDynamicParameters
{
    void AddParameters(IDbCommand command);
}

Dapper již má generickou implementaci DB tohoto rozhraní s názvem:DynamicParameters což vám umožňuje zpracovávat výstupní a návratové hodnoty.

K napodobení těchto prostorových věcí bych zkusil něco jako:

public class SpatialParam : SqlMapper.IDynamicParameters
{
    string name; 
    object val;

    public SpatialParam(string name, object val)
    {
       this.name = name; 
       this.val = val;
    }

    public void AddParameters(IDbCommand command, SqlMapper.Identity identity)
    {
       var sqlCommand = (SqlCommand)command;
       sqlCommand.Parameters.Add(new SqlParameter
       {
          UdtTypeName = "geometry",
          Value = val,
          ParameterName = name
       });
    }
}

Použití:

cnn.Query("SELECT * FROM MyTable WHERE @parameter.STIntersects(MyGeometryColumn)",
  new SpatialParam("@parameter", builder.ConstructedGeometry));

Tato jednoduchá implementace rozhraní zpracovává pouze jeden parametr, ale lze ji snadno rozšířit tak, aby zpracovávala více parametrů, buď předáním z konstruktoru, nebo přidáním pomocné metody AddParameter.



  1. MySQL IF NOT NULL, pak zobrazte 1, jinak zobrazte 0

  2. MySQL SUM Hodnoty json seskupené podle klíčů json

  3. Jak uložit uuid jako číslo?

  4. Oracle TO_DATE nefunguje