6

Ich habe eine asp.net Mvc 5 Web-API-Anwendung, wo ich mit Entity Framework eine SqlGeography Instanz in eine DbGeography Instanz konvertieren müssen zur Abfrage 6. ich den folgenden Code bin mit, dies zu tun:Unterstützt EF 6 SQL Server 2014-Typen?

SqlGeography geo = SqlGeography.STGeomFromText(chars, Constants.SRID); 
DbGeography dbGeo = DbSpatialServices.Default.GeographyFromProviderValue(geo); 

der Aufruf von GeographyFromProviderValue wirft die folgende Ausnahme:

der angegebene Provider-Wert mit dieser räumlichen Dienst Umsetzung nicht kompatibel ist. Es wird ein Wert vom Typ 'Microsoft.SqlServer.Types.SqlGeography, Microsoft.SqlServer.Types, Version = 11.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91' benötigt.
Parametername: providerValue

Sicher genug, mein SqlGeography Beispiel kommt aus dem SQL Server 2014-Typen Baugruppe (Microsoft.SqlServer.Types, Version 12.0.0.0).

Graben in den Entity Framework-Quellcode zeigt diese Methode die Täter zu sein:

//EntityFramework.SqlServer.dll(6.0.0.0) System.Data.Entity.SqlServer.SqlTypesAssemblyLoader 
public SqlTypesAssemblyLoader(IEnumerable<string> assemblyNames = null) 
{ 
    this._preferredSqlTypesAssemblies = (assemblyNames ?? ((IEnumerable<string>)new string[] 
    { 
     "Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91", 
     "Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 
    })); 
     this._latestVersion = new Lazy<SqlTypesAssembly>(new Func<SqlTypesAssembly>(this.BindToLatest), true); 
    } 
} 

Wie Sie sehen können, ist die Art Baugruppe für SQL Server 2014 nicht enthalten. Bedeutet das, dass Entity Framework 6 keine Typen von SQL Server 2014 unterstützt?

Offensichtlich konnte ich die Typen Assembly für SQL Server 2012 finden und stattdessen verwenden, aber ich würde es lieber nicht müssen. Gibt es anders herum dieses Problem?

Antwort

3

Sie können die SQL Server-Typen-Assembly über die statische Eigenschaft SqlProviderServices.SqlServerTypesAssemblyName festlegen. Also, in Startup-Code Folgendes:

SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"; 
+0

Arbeitete großartig. Vielen Dank! – Mansfield

Verwandte Themen