Comment utiliser Dapper avec MS SQL Server (2012) Colonne Geospatial / SQLGeography

J'ai une database SQL Server 2012 avec une table qui contient une colonne géographique et je veux utiliser Dapper dans une application .Net fonctionnant avec cette database, mais autant que je peux dire et voir dans le code Dapper, "seulement" Entity Framework Le type DBGeography est pris en charge , le type de données SQLGeography sous-jacent n'a pas d'autre mention dans le référentiel.

Est-ce que Dapper peut gérer ces types de colonnes de manière "magique", ou est-ce que je devrais écrire explicitement un Dapper.SqlMapper.TypeHandler pour ceux-ci?

La prise en charge de SqlGeography a été ajoutée dans la prochaine version, toujours via le package Dapper.EntityFramework . Je n'ai pas encore construit / déployé, comme je suis dans deux esprits pour savoir si c'est l'assembly le plus approprié pour vivre … mais je ne veux pas non plus dépendre de Microsoft.SqlServer.Types dans la bibliothèque de base. Il peut y avoir une façon de le faire sans cela, cependant.


Mise à jour: ceci a maintenant monté d'un niveau à la bibliothèque principale, donc vous ne devriez pas avoir besoin de references EF ou Dapper.EntityFramework ; ça devrait juste marcher ; ceci a été poussé comme Dapper 1.32 .

Exemple:

 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 SqlSsortingng( "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; } }