我有一个SQL Server 2012数据库,该数据库的表包含一个 地理位置 列,并且我想在使用该数据库的.Net应用程序中使用Dapper,但据我所知,在Dapper代码中,“仅”实体框架DBGeography类型支持,底层SQLGeography数据类型存储库中的任何其他提。
Dapper还是可以“神奇地”处理这些列类型,还是我必须为这些显式编写Dapper.SqlMapper.TypeHandler?
SqlGeography在下一个发行版中, 再次通过Dapper.EntityFramework软件包添加了对的支持。我还没有构建/部署,因为我对这是否是最适合它的组装有两种看法,但是我也不希望依赖于Microsoft.SqlServer.Types核心库。但是,可能有一种方法可以做到这一点。
SqlGeography
Dapper.EntityFramework
Microsoft.SqlServer.Types
更新:现在已将其上移到核心库,因此您不需要任何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; } }