6

Mam asp.net mvc aplikacji 5 Web API, gdy trzeba konwertować instancji SqlGeography na przykład DbGeography dla zapytań z Entity Framework 6. Używam poniższy kod, żeby to zrobić:Czy EF 6 obsługuje typy SQL Server 2014?

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

Wywołanie GeographyFromProviderValue powoduje zgłoszenie następującego wyjątku:

Podana wartość dostawcy nie jest zgodna z tą implementacją usług przestrzennych. Wartość wymagana jest dla typu "Microsoft.SqlServer.Types.SqlGeography, Microsoft.SqlServer.Types, wersja = 11.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91".
nazwa Parametr: providerValue

Rzeczywiście, moje wystąpienie SqlGeography pochodzi z SQL Server 2014 typy montaż (Microsoft.SqlServer.Types, Version 12.0.0.0).

Kopanie do kodu źródłowego Entity Framework pokazuje tę metodę, aby być winowajcą:

//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); 
    } 
} 

Jak widać, zespół typy SQL Server 2014 nie jest wliczony w cenę. Czy to oznacza, że ​​Entity Framework 6 nie obsługuje typów z SQL Server 2014?

Oczywiście mogłem znaleźć zestaw typów dla SQL Server 2012 i używać go zamiast tego, ale wolałbym nie. Czy istnieje inny sposób obejścia tego problemu?

Odpowiedz

3

Można ustawić zestaw modułów SQL Server za pomocą właściwości statycznej SqlProviderServices.SqlServerTypesAssemblyName. Tak więc wprowadź kod startowy:

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

Pracował świetnie. Dziękuję Ci! – Mansfield