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?
Pracował świetnie. Dziękuję Ci! – Mansfield