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

本文关键字:Server 2014类型 SQL 支持 是否 EF | 更新日期: 2023-09-27 18:14:53

我有一个asp.net mvc 5 web api应用程序,我需要将SqlGeography实例转换为DbGeography实例,以便与实体框架6查询。我使用下面的代码:

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

调用GeographyFromProviderValue会抛出以下异常:

指定的提供者值与此空间服务实现不兼容。需要一个类型为"Microsoft.SqlServer.Types"的值。SqlGeography Microsoft.SqlServer。类型,版本=11.0.0.0,文化=中性,PublicKeyToken=89845dcd8080cc91'.
参数名称:providerValue

当然,我的SqlGeography实例来自SQL Server 2014类型汇编(Microsoft.SqlServer.Types, Version 12.0.0.0)。

深入实体框架源代码可以发现这个方法是罪魁祸首:

//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的类型集不包括在内。这是否意味着实体框架6不支持SQL Server 2014的类型?

显然,我可以找到SQL Server 2012的类型汇编并使用它,但我宁愿不这样做。这个问题还有别的解决办法吗?

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

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

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