No se puede leer SqlGeography con Dapper

dapper sqlgeography

Pregunta

Seguí muchas preguntas de SO y recibo un error similar, pero no puedo solucionar este problema.

La versión My Dapper es 1.50.1 Mi versión de Microsoft.SqlServer.Types es 11.0.2

He agregado la redirección de enlace en el archivo de configuración de la siguiente manera:

<runtime>
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
      <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />
    </dependentAssembly>
</runtime>

El error que recibo es:

Error al analizar la columna 2 (Ubicación = PUNTO (-122.349 47.651) - Objeto)

Mientras que la excepción interna es:

[A] Microsoft.SqlServer.Types.SqlGeography no se puede convertir a [B] Microsoft.SqlServer.Types.SqlGeography. El tipo A se origina de 'Microsoft.SqlServer.Types, Version = 10.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91' en el contexto 'Default' en la ubicación 'C: \ WINDOWS \ assembly \ GAC_MSIL \ Microsoft.SqlServer.Types \ 10.0 .0.0__89845dcd8080cc91 \ Microsoft.SqlServer.Types.dll '. Tipo B se origina de 'Microsoft.SqlServer.Types, Versión = 11.0.0.0, Cultura = neutral, PublicKeyToken = 89845dcd8080cc91' en el contexto 'Predeterminado' en la ubicación 'C: \ WINDOWS \ assembly \ GAC_MSIL \ Microsoft.SqlServer.Types \ 11.0 .0.0__89845dcd8080cc91 \ Microsoft.SqlServer.Types.dll '.

Si acabo de leer un objeto dinámico, todo está bien, pero si leo a mi propio tipo que tiene SqlGeography obtengo este error.

Pensé que hice todo lo recomendado, pero parece que me perdí algo.

Respuesta popular

@Marc Gravell hizo un buen trabajo sobre esa referencia de referencia a continuación y le salvará la vida.

SqlGeography

Problema

Para aplicaciones ASP.NET, agregue la siguiente línea de código al método Application_Start en Global.asax.cs:

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));

Para aplicaciones de escritorio, agregue la siguiente línea de código para ejecutar antes de realizar cualquier operación espacial:

SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

El método .LoadNativeAssemblies obtendrá el ensamblaje correcto para su base en la arquitectura de la CPU.

En la carpeta bin debes tener esto.

enter image description here



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