Impossibile leggere SqlGeography con Dapper

dapper sqlgeography

Domanda

Ho seguito un sacco di domande su SO e sto ottenendo errore simillar ma non riesco a risolvere questo problema.

La mia versione di Dapper è 1.50.1 La mia versione di Microsoft.SqlServer.Types è 11.0.2

Ho aggiunto il reindirizzamento obbligatorio nel file di configurazione come segue:

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

L'errore che ottengo è:

Errore durante l'analisi della colonna 2 (Posizione = PUNTO (-122.349 47.651) - Oggetto)

Mentre l'eccezione interna è:

[A] Microsoft.SqlServer.Types.SqlGeography non può essere trasmesso a [B] Microsoft.SqlServer.Types.SqlGeography. Il tipo A deriva da "Microsoft.SqlServer.Types, Version = 10.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91" nel contesto "Predefinito" nella posizione "C: \ WINDOWS \ assembly \ GAC_MSIL \ Microsoft.SqlServer.Types \ 10.0 .0.0__89845dcd8080cc91 \ Microsoft.SqlServer.Types.dll'. Il tipo B ha origine da "Microsoft.SqlServer.Types, Versione = 11.0.0.0, Cultura = neutrale, PublicKeyToken = 89845dcd8080cc91" nel contesto "Predefinito" nella posizione "C: \ WINDOWS \ assembly \ GAC_MSIL \ Microsoft.SqlServer.Types \ 11.0 .0.0__89845dcd8080cc91 \ Microsoft.SqlServer.Types.dll'.

Se faccio solo una lettura all'oggetto dinamico tutto va bene, ma se leggo il mio tipo che ha SqlGeography ottengo questo errore.

Pensavo di aver fatto tutto come raccomandato ma sembra che mi sia sfuggito qualcosa.

Risposta popolare

@Marc Gravell ha fatto un buon lavoro a proposito di vedere il riferimento qui sotto e ti salverà la vita.

SqlGeography

Problema

Per le applicazioni ASP.NET, aggiungere la seguente riga di codice al metodo Application_Start in Global.asax.cs:

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

Per le applicazioni desktop, aggiungere la seguente riga di codice da eseguire prima di eseguire qualsiasi operazione spaziale:

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

Il metodo .LoadNativeAssemblies otterrà l'assembly corretto per la tua base sull'architettura della CPU.

Nella cartella bin dovresti avere questo.

inserisci la descrizione dell'immagine qui



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow