DbGeography를 사용하여 SQL Server에 삽입하는 방법

c# dapper geospatial micro-orm sql-server

문제

using System.Data.Entity.Spatial; 하여 모델 using System.Data.Entity.Spatial; 만들었습니다 using System.Data.Entity.Spatial;

public class Store
{
    public int Id { get; private set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public DbGeography Location { get; set; }
}

DB에 삽입

using (SqlConnection conn = SqlHelper.GetOpenConnection())
{
    const string sql = "INSERT INTO Stores(Name, Address, Location) " + 
                       "VALUES (@Name, @Address, @Location)";
    return conn.Execute(sql, store);                                
}

예외 type System.Data.Entity.Spatial.DbGeography cannot be used as a parameter value

내가 삽입하는 방법에 대한 검색을 시도했다, 이게 내가 찾을 수있는 최선이지만, 단 하나의 매개 변수를 삽입하려고, dbgeography 회원이 개체를 삽입하려면 어떻게해야합니까?

업데이트 # 1

나는 해킹을 시도하거나 물건을 확장하는 것을 포기했는데, 나는 아주 신기해서 시간은 현재 내 편이 아니다. 지리 데이터 유형 삽입을 자주 수행 할 필요가 없기 때문에 기본 작업으로 되돌아갔습니다.

using (SqlConnection conn = SqlHelper.GetOpenConnection())
        {
            var sql = "INSERT INTO Stores (Name, Address, IsActive, Location, TenantId) " +
                      "VALUES('@Name', '@Address', @IsActive, geography::Point(@Lat,@Lng, 4326), @TenantId);";

            return conn.Execute(sql, new 
            { 
                Name = store.Name, 
                Address = store.Address, 
                IsActive = store.IsActive,
                Lat = store.Location.Latitude.Value,
                Lng = store.Location.Longitude.Value,
                TenantId = store.TenantId
            });             
        }

수락 된 답변

핵심 ADO.NET 어셈블리 외부의 형식에 대한 직접 지원을 추가하는 것은 이름 기반의 많은 반영을 강요하거나 종속성을 부 풀리며 버전 문제를 야기하기 때문에 문제가됩니다. 여기에 IDynamicParameters 를 사용할 필요는 없습니다 (또는 IMO가 ICustomQueryParameter 수도 있음). 대신 ICustomQueryParameter 를 사용하여 단일 매개 변수를 나타낼 수 있습니다. DbGeography 특별한 경우 탐지가 DbGeography 라이브러리가 변경되지 않는 한 다음과 같은 작업을 수행해야합니다.

return conn.Execute(sql, new {
    store.Name, store.Address, Location=store.Location.AsParameter()
});

여기서 AsParameter() 는 적절하게 추가하는 ICustomQueryParameter 구현을 반환하는 확장 메서드입니다.


편집 : 여기에 대한 업데이트는 https://stackoverflow.com/a/24408529/23354를 참조하십시오.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.