6

Tôi có một asp.net MVC 5 web ứng dụng api nơi tôi cần phải chuyển đổi một trường hợp SqlGeography vào một trường hợp DbGeography cho truy vấn với Entity Framework 6. Tôi đang sử dụng đoạn mã sau để làm như vậy:EF 6 có hỗ trợ các loại SQL Server 2014 không?

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

Cuộc gọi đến GeographyFromProviderValue ném ngoại lệ sau:

Giá trị nhà cung cấp được chỉ định không tương thích với việc triển khai dịch vụ không gian này. Giá trị là bắt buộc của loại 'Microsoft.SqlServer.Types.SqlGeography, Microsoft.SqlServer.Types, Phiên bản = 11.0.0.0, Văn hóa = trung lập, PublicKeyToken = 89845dcd8080cc91'.
tên Parameter: providerValue

đủ chắc, SqlGeography dụ của tôi là đến từ SQL Server 2014 loại lắp ráp (Microsoft.SqlServer.Types, Version 12.0.0.0).

Đào vào mã nguồn Entity Framework cho thấy phương pháp này là thủ phạm:

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

Như bạn có thể thấy, lắp ráp các loại cho SQL Server 2014 không được bao gồm. Điều này có nghĩa là Entity Framework 6 không hỗ trợ các loại từ SQL Server 2014?

Rõ ràng tôi có thể tìm thấy các loại lắp ráp cho SQL Server 2012 và sử dụng thay vào đó, nhưng tôi không muốn phải. Có cách nào khác xung quanh vấn đề này không?

Trả lời

3

Bạn có thể đặt các loại máy chủ SQL được lắp ráp thông qua SqlProviderServices.SqlServerTypesAssemblyName thuộc tính tĩnh. Vì vậy, hãy đặt mã khởi động như sau:

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

Đã làm việc tuyệt vời. Cảm ơn bạn! – Mansfield

Các vấn đề liên quan