Dapper를 MS SQL Server (2012)와 함께 사용하는 방법 Geospatial / SQLGeography Column

dapper sql sql-server

문제

지리 열이 포함 된 테이블이있는 SQL Server 2012 데이터베이스가 있는데 해당 데이터베이스에서 작동하는 .Net 응용 프로그램에서 Dapper를 사용하려고하지만 Dapper 코드에서 "유일한"Entity Framework의 정보를 볼 수있는 한 DBGeography 유형이 지원 되면 기본 SQLGeography 데이터 유형은 저장소에 다른 언급이 없습니다.

Dapper가 이러한 열 유형을 '마술처럼'처리 할 수 ​​있습니까? 아니면 이들에 대해 Dapper.SqlMapper.TypeHandler를 명시 적으로 작성해야합니까?

수락 된 답변

SqlGeography 대한 지원은 다음 릴리스 에서 Dapper.EntityFramework 패키지를 통해 다시 추가되었습니다. 아직 구축 / 배포하지 않았습니다. 그 두 가지가 살기에 가장 적합한 어셈블리인지 여부는 두 가지로 생각할 수 있지만 Microsoft.SqlServer.Types SQLServer에 대한 의존성을 원하지 않습니다. 핵심 라이브러리. 그러나 그것 없이는 그것을 할 수있는 방법이있을 수 있습니다.


업데이트 : 이제는 핵심 라이브러리 수준까지 올라 Dapper.EntityFramework EF 참조 나 Dapper.EntityFramework 가 필요하지 않습니다. 그것은 단지 작동 해야 합니다 ; 이것은 Dapper 1.32 로 푸시되었습니다.

예:

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; }
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow