Dapper Read SqlHierachyId Column (SQL Server 2008 R2)

.net c# dapper sql-server

Pregunta

Estoy tratando de leer desde una base de datos de SQL Server 2008 R2 que contiene columnas del tipo hierarchyid SQL Server (también conocido como SqlHierachyId ).

Quiero usar esta clase con Dapper:

public class Foo 
{ 
    public int Id { get; set; }
    public SqlHierarchyId Path { get; set; }
} 

por ejemplo: connection.Query<Foo>("select 3 as [Id], hierarchyid::Parse('/1/2/3/') as [Path]");

(Nota para las pruebas, debe hacer referencia a los Program Files (x86)\Microsoft SQL Server\110\Shared\Microsoft.SqlServer.Types.dll para poder usar SqlHierarchyId)

Si ejecuto esto, obtengo una excepción DataException: Error parsing column x (Path=/1/2/3/ - Object) 1/2/3 Error parsing column x (Path=/1/2/3/ - Object)

He intentado agregar un ITypeMap a través de y establecer puntos de interrupción en todos los métodos de interfaz para ver qué valores se pasan, pero nunca se llama.

¿Alguna sugerencia sobre cómo puedo hacer que Dapper me permita especificar un mapeador personalizado? (Alternativamente, si hay una extensión que admite todos los tipos Sql, sería bueno también)

Respuesta aceptada

Dapper 1.34 tiene soporte para SqlHierarchyId en la biblioteca central; ahora debería funcionar.


Respuesta popular

Dapper admite SqlHierarchyId, pero igual obtendrá la excepción si está utilizando el último paquete de Microsoft.SqlServer.Types Nuget. Para que funcione, agrégalo a tu web.config o app.config:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
       <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
       <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow