6

У меня есть asp.net MVC 5 Web API приложение, где мне нужно, чтобы преобразовать SqlGeography экземпляр в DbGeography, например, для выполнения запросов с Entity Framework 6. Я использую следующий код, чтобы сделать это:Поддерживает ли EF 6 типы SQL Server 2014?

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

Призыв к GeographyFromProviderValue выдает следующее исключение:

Указанное значение поставщика несовместимо с реализацией этой пространственной службы. Требуется значение типа «Microsoft.SqlServer.Types.SqlGeography, Microsoft.SqlServer.Types, Version = 11.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91».
имя Параметр: providerValue

Конечно, мой SqlGeography экземпляр поступает из SQL Server 2014 типов сборки (Microsoft.SqlServer.Types, Version 12.0.0.0).

копания в исходный код Entity Framework показывает этот метод, чтобы быть преступником:

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

Как вы можете видеть, сборка типа для SQL Server 2014 не входит. Означает ли это, что Entity Framework 6 не поддерживает типы SQL Server 2014?

Очевидно, что я могу найти сборку типов для SQL Server 2012 и использовать ее вместо этого, но мне бы этого не хотелось. Есть ли другой путь вокруг этой проблемы?

ответ

3

Вы можете установить сборку типов SQL Server через статическое свойство SqlProviderServices.SqlServerTypesAssemblyName. Итак, введите код запуска:

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

Работал отлично. Спасибо! – Mansfield