我正在尝试在ASP.NET MVC 4中创建一个webapi.webapi使用了Entity Framework 5 Spatial类型,我编写了一个非常简单的代码。
public List<Area> GetAllAreas()
{
List<Area> aList = db.Areas.ToList();
return aList;
}
区域包含DbGeometry。
当我运行本地时,它可以工作,但是当我将它发布到azure时,它给了我这个错误:
此提供程序无法使用空间类型和函数,因为无法找到程序集“Microsoft.SqlServer.Types”版本10或更高版本。
任何人都知道如何解决这个问题? :)
谢谢!
答案 0 :(得分:114)
我找到了解决方案!只需安装nuget包Microsoft.SqlServer.Types
即可PM&GT;安装包Microsoft.SqlServer.Types
答案 1 :(得分:83)
上面的answer可以在使用程序集的版本11(SQL Server 2012)时正常工作。
我遇到了问题,因为我的解决方案对同一程序集的版本13(SQL Server 2016)有其他依赖性。在这种情况下请注意,Entity Framework(至少v6.1.3)在其 SqlTypesAssemblyLoader (此异常的来源)中进行了硬编码,仅查找程序集的版本10和11。
为了解决这个问题,我发现你可以告诉Entity Framework你想要使用哪个程序集:
SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
答案 2 :(得分:55)
出于某种原因,我错过了一个绑定重定向,它为我解决了这个问题。
添加以下修复我的问题
<dependentAssembly>
<assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="10.0.0.0-11.0.0.0" newVersion="14.0.0.0" />
</dependentAssembly>
答案 3 :(得分:22)
有两种方法可以解决这个问题:
第二种方法是使用NuGet包管理器并安装
Install-Package Microsoft.SqlServer.Types
然后按照下面的插件说明进行操作
将使用空间数据类型的应用程序部署到计算机 没有SQL Server&#39;系统CLR类型的SQL Server&#39;安装你 还需要部署本机程序集SqlServerSpatial110.dll。都 这个程序集的x86(32位)和x64(64位)版本已经存在 在SqlServerTypes \ x86下添加到您的项目中 SqlServerTypes \ x64子目录。本机程序集msvcr100.dll是 还包括在未安装C ++运行时的情况下。
您需要添加代码以加载其中正确的其中一个程序集 运行时(取决于当前架构)。
ASP.NET应用程序对于ASP.NET应用程序,请添加以下行 代码到Global.asax.cs中的Application_Start方法:
SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
桌面应用程序对于桌面应用程序,请添加以下行 在执行任何空间操作之前运行的代码:
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
答案 4 :(得分:13)
我也遇到过这个问题,但是已经安装了Microsoft.SqlServer.Types nuget包。
解决问题的方法是解决方案&gt;参考文献&gt; System.Data.Entity&gt;属性&gt;复制本地,并将其设置为True。
注意:强> Copy for Local for Microsoft.SqlServer.Types已设置为true,即使问题出在System.Data.Entity上,错误消息仍然是Microsoft.SqlServer.Types。
解决方案来自Windows Azure forum。
答案 5 :(得分:4)
我的解决方案只是将这行代码添加到Application_Start()
中的Global.asax.cs中:
SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
祝我兄弟们好运。
答案 6 :(得分:3)
请在Web.config文件中添加“ dependentAssembly”
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
这对我有用
答案 7 :(得分:1)
以上解决方案都不适合我。
您知道吗,此错误也可能是由于服务器上的资源不足。我重新启动了SQL服务器并自动解决了。
答案 8 :(得分:1)
在当前帖子的答案中紧跟comment之后,添加这两行(最好是main函数)解决了我的Console App问题:
Private Sub SearchSheet()
Dim Sheet As Worksheet
Dim Output As String
For Each Sheet In Worksheets
Output = Sheet.Cells(1, 4) ' Cell D1
If Output = vbNullString Then
MsgBox "Sheet: " & Sheet.Name
Sheet.Activate
Exit Sub
End If
Next
' Clean
Set Sheet = Nothing
End Sub
答案 9 :(得分:0)
刚刚遇到同样的问题。我正在使用EF6
并调用SQL
,它具有使用空间命令的SQL函数。我通过单元测试对此进行了测试,并且工作正常。当我开始连接我的Asp.Net
解决方案时,我收到了错误
此提供程序无法使用空间类型和功能 因为汇编了Microsoft.SqlServer.Types&#39; 10或更高版本 无法找到。
添加NUGET
包&#34; Microsoft.SqlServer.Types&#34;并将SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
添加到Application_Start method
中的Global.asax.cs
,一切正常。
答案 10 :(得分:0)
就我而言,一个组合严重的连接字符串导致了这种情况。验证您的连接字符串是否正确组合。
答案 11 :(得分:0)
以我的情况(一个WebForms应用程序)为例,我解决了在Application_Start
文件的Global.asax
中添加以下几行的问题。
SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
System.Data.Entity.SqlServer.SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";
我希望它能对某人有所帮助。