Chìa khóa để triển khai các thông số cụ thể DB kỳ lạ và tuyệt vời, tất cả đều nằm gọn trong SqlMapper.IDynamicParameters
Giao diện đơn giản này có một điểm cuối duy nhất:
public interface IDynamicParameters
{
void AddParameters(IDbCommand command);
}
Dapper đã có một triển khai chung DB của giao diện này được gọi là:DynamicParameters
cho phép bạn xử lý các giá trị đầu ra và trả về.
Để mô phỏng công cụ không gian này, tôi sẽ thử một cái gì đó như:
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
});
}
}
Cách sử dụng:
cnn.Query("SELECT * FROM MyTable WHERE @parameter.STIntersects(MyGeometryColumn)",
new SpatialParam("@parameter", builder.ConstructedGeometry));
Việc triển khai đơn giản này của giao diện chỉ xử lý một tham số duy nhất, nhưng nó có thể dễ dàng được mở rộng để xử lý nhiều tham số, bằng cách chuyển vào từ phương thức khởi tạo hoặc thêm phương thức AddParameter của trình trợ giúp.