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

C# EF 6是否支持SQL Server 2014类型?,c#,.net,entity-framework,entity-framework-6,sql-server-2014,C#,.net,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

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

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,Culture=neutral,PublicKeyToken=89845dcd8080cc91”类型的值是必需的。
参数名称:providerValue

果然,我的
SqlGeography
实例来自SQL Server 2014类型程序集(
Microsoft.SqlServer.types,版本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);
    }
}
//EntityFramework.SqlServer.dll(6.0.0.0)System.Data.Entity.SqlServer.sqltypesSemblyLoader
公共SqlTypesAssemblyLoader(IEnumerable assemblyNames=null)
{   
此.\u首选SqlTypesAssemblies=(assemblyNames??((IEnumerable)新字符串[]
{
“Microsoft.SqlServer.Types,版本=11.0.0.0,区域性=中性,PublicKeyToken=89845dcd8080cc91”,
Microsoft.SqlServer.Types,版本=10.0.0.0,区域性=中性,PublicKeyToken=89845dcd8080cc91
}));
this.\u latest version=new Lazy(new Func(this.BindToLatest),true);
}
}
如您所见,不包括SQL Server 2014的类型程序集。这是否意味着Entity Framework 6不支持SQL Server 2014中的类型


显然,我可以找到SQL Server 2012的类型程序集,并使用它,但我不想这样做。是否有其他方法解决此问题?

您可以通过静态属性设置SQL Server类型程序集。 因此,请输入以下启动代码:

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

工作得很好。非常感谢。