Cómo utilizar Dapper con MS SQL Server (2012) Columna geoespacial / SQLGeography

dapper sql sql-server

Pregunta

Tengo una base de datos de SQL Server 2012 con una tabla que contiene una columna de geografía y quiero usar Dapper en una aplicación .Net que trabaje con esa base de datos, pero por lo que puedo ver y ver en el código Dapper, "solo" Entity Framework El tipo DBGeography es compatible , el tipo de datos SQLGeography subyacente no tiene otra mención en el repositorio.

¿Puede Dapper manejar estos tipos de columna 'mágicamente' sin embargo o tendría que escribir explícitamente un Dapper.SqlMapper.TypeHandler para estos?

Respuesta aceptada

El soporte para SqlGeography se ha agregado en la próxima versión, nuevamente a través del paquete Dapper.EntityFramework . No he creado / implementado aún, ya que tengo dudas sobre si ese es el ensamblaje más apropiado para vivir en él ... pero tampoco quiero tomar una dependencia de Microsoft.SqlServer.Types en la biblioteca central Sin embargo, puede haber una manera de hacerlo sin eso.


Actualización: ahora se ha movido un nivel a la biblioteca central, por lo que no debería necesitar referencias de EF o Dapper.EntityFramework ; debería funcionar ; esto ha sido empujado como Dapper 1.32 .

Ejemplo:

public void SqlGeography_SO25538154()
{
    Dapper.SqlMapper.ResetTypeHandlers(); // to show it doesn't depend on any
    connection.Execute("create table #SqlGeo (id int, geo geography)");

    var obj = new HazSqlGeo
    {
        Id = 1,
        Geo = SqlGeography.STLineFromText(
            new SqlChars(new SqlString(
                "LINESTRING(-122.360 47.656, -122.343 47.656 )")), 4326)
    };
    connection.Execute("insert #SqlGeo(id, geo) values (@Id, @Geo)", obj);
    var row = connection.Query<HazSqlGeo>(
        "select * from #SqlGeo where id=1").SingleOrDefault();
    row.IsNotNull();
    row.Id.IsEqualTo(1);
    row.Geo.IsNotNull();
}

class HazSqlGeo
{
    public int Id { get; set; }
    public SqlGeography Geo { get; set; }
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué