EF 6 是否支持 SQL Server 2014 类型?
Does EF 6 support SQL Server 2014 Types?
我有一个 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
的调用抛出以下异常:
The specified provider value is not compatible with this spatial services implementation. A value is required of type 'Microsoft.SqlServer.Types.SqlGeography, Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'.
Parameter name: 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 的类型程序集并使用它,但我宁愿不必这样做。有没有其他办法解决这个问题?
您可以通过 SqlProviderServices.SqlServerTypesAssemblyName
静态 属性 设置 SQL 服务器类型程序集。
因此,将以下启动代码放入:
SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";
我有一个 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
的调用抛出以下异常:
The specified provider value is not compatible with this spatial services implementation. A value is required of type 'Microsoft.SqlServer.Types.SqlGeography, Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'.
Parameter name: 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 的类型程序集并使用它,但我宁愿不必这样做。有没有其他办法解决这个问题?
您可以通过 SqlProviderServices.SqlServerTypesAssemblyName
静态 属性 设置 SQL 服务器类型程序集。
因此,将以下启动代码放入:
SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";