此提供程序不提供空间类型和功能

时间:2017-03-25 05:49:27

标签: sql sql-server visual-studio-2015 entity-framework-6

我有使用Update 3的Visual Studio 2015社区版。我正在使用Entity Framework 6.在我的本地运行项目时,我收到错误,如屏幕截图所示(https://puu.sh/uXFh0/64648902af.png)。就像在我使用c.Geography的代码中一样;它在那时显示例外。

我的系统上安装了带有CLR类型的Sql Server 2016,如下面的屏幕截图所示https://puu.sh/uXFqy/9f3c56a329.png

我还使用nuget包Install-Package Microsoft.SqlServer.Types。

安装了Sql server类型

仍然没有运气。我还能做些什么来解决这个问题?

4 个答案:

答案 0 :(得分:1)

您安装了多个版本的CLR类型,因此您需要告诉应用程序使用哪个版本。不确定它是什么类型的应用程序,但您需要将这些代码行放在global.asax.cs(Web应用程序)中:

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";

或者在空间代码运行之前在桌面应用中执行此操作:

SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";

答案 1 :(得分:0)

没有实体框架,我已经解决了这个问题:

尝试在服务器上序列化Geography列并在客户端上反序列化

  1. 序列化为varbinary(max)(CAST(your_column as varbinary))并使用SqlGeography.Deserialize(SqlBytes)方法对其进行反序列化
  2. 使用SqlGeography.STAsBinary()序列化为WKB,并使用SqlGeography.STGeomFromWKB(SqlBytes,Int32)对其进行反序列化
  3. 1更好,在情况2中你不能传递srid(通常你不需要srid)

    要使用实体框架,请尝试此

    1. 在您的客户端
    2. 上将此字段声明为SqlBytes
    3. 服务器端的视图可以从Geography转换为varbinary
    4. 如果您在更新视图时遇到问题,请使用存储过程或代替更新/插入触发器
    5. 我认为这不是很好的解决方案,但它可以帮助您解决问题

答案 2 :(得分:0)

对我们有用的是Assembly 'Microsoft.SqlServer.Types' version 10 or higher could not be found的答案。我们为SQL Server 2012安装了Microsoft System CLR Types,问题已修复。

答案 3 :(得分:0)

对于Microsft.SqlServer.Types错误,即使安装了SQL 2016,也需要安装SQL Server 2012 Feature Pack。这是一个预先要求。请查看以下链接

https://msdn.microsoft.com/en-us/data/dn194325