2014-08-27 15 views
5

Tôi có cơ sở dữ liệu SQL Server 2012 với bảng chứa cột địa lý và tôi muốn sử dụng Dapper trong ứng dụng .Net làm việc với cơ sở dữ liệu đó , nhưng theo như tôi có thể nói và nhìn thấy trong mã Dapper, "chỉ" loại DBGeography của Entity Framework là supported, kiểu dữ liệu SQLGeography cơ bản không có đề cập đến khác trong kho lưu trữ.Cách sử dụng Dapper với MS SQL Server (2012) Cột địa lý/SQLGeography

Có thể Dapper xử lý các loại cột 'kỳ diệu' này hoặc tôi có phải viết rõ ràng một Dapper.SqlMapper.TypeHandler cho chúng không?

+0

loại gì (s) được bạn đang sử dụng để lập bản đồ này? Bạn đang sử dụng 'SqlGeography' trực tiếp? hoặc là...? –

+0

có liên quan; http://stackoverflow.com/questions/6690565/using-dapper-with-sql-spatial-types-as-a-parameter/25544690#25544690 và http://stackoverflow.com/questions/12090549/mapping-sqlgeography- with-dapper? lq = 1 –

Trả lời

6

Hỗ trợ cho SqlGeography đã được thêm vào bản phát hành tiếp theo, một lần nữa thông qua gói Dapper.EntityFramework. Tôi chưa xây dựng/triển khai, như tôi đang ở trong hai suy nghĩ về việc liệu đó có phải là hội đồng phù hợp nhất để nó sống ... nhưng tôi cũng không muốn phụ thuộc vào Microsoft.SqlServer.Types trong thư viện lõi. Có thể có một cách để làm điều đó mà không có điều đó, mặc dù.


Cập nhật: đây bây giờ đã chuyển lên một cấp độ để các thư viện lõi, vì vậy bạn không cần bất kỳ tài liệu tham khảo EF hoặc Dapper.EntityFramework; cần chỉ hoạt động; điều này đã được đẩy là Dapper 1.32.

Ví dụ:

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

Tuyệt vời, đó chính xác là những gì tôi đang tìm kiếm/hy vọng - cảm ơn Marc! –

+0

@ JörgB. cho tôi biết nếu bạn gặp bất kỳ sự cố nào, v.v. –

+0

Sẽ làm - sẽ cung cấp cho bạn thử nghiệm kỹ lưỡng sau ngày hôm nay. –

Các vấn đề liên quan