EF 6是否支持SQL Server 2014类型?

Man*_*eld 7 .net c# entity-framework entity-framework-6 sql-server-2014

我有一个asp.net mvc 5 web api应用程序,我需要将SqlGeography实例转换为DbGeography实例,以便使用Entity Framework 6进行查询.我使用以下代码执行此操作:

SqlGeography geo = SqlGeography.STGeomFromText(chars, Constants.SRID);
DbGeography dbGeo = DbSpatialServices.Default.GeographyFromProviderValue(geo);
Run Code Online (Sandbox Code Playgroud)

调用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,不包括SQL Server 2014的类型程序集.这是否意味着Entity Framework 6不支持SQL Server 2014中的类型?

显然,我可以找到SQL Server 2012的Types程序集并使用它,但我宁愿不必这样做.还有其他方法可以解决这个问题吗?

Ulu*_*rov 5

您可以通过SqlProviderServices.SqlServerTypesAssemblyName静态属性设置SQL Server类型汇编。因此,在启动代码中输入以下内容:

SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";
Run Code Online (Sandbox Code Playgroud)