EF连接Sqlserver2014,使用DBGeography时提示无法加载sqlserverspatial.dll

(1)确认你要使用的SqlServer版本,如果是2014,就要在nuget中添加microsoft.sqlserver.types.dll,使用12.0.4100.1这个版本,它会自动添加sqlservertypes文件夹到项目中,并自动添加一个Loader类,在Loader类中修改以下代码,指定让sqlserver使用sqlserver2014的版本使用sqlserver spatial:

public static void LoadNativeAssemblies(string rootApplicationPath)
{
var nativeBinaryPath = IntPtr.Size > 4
? Path.Combine(rootApplicationPath, @"SqlServerTypes\x64\")
: Path.Combine(rootApplicationPath, @"SqlServerTypes\x86\");

LoadNativeAssembly(nativeBinaryPath, "msvcr100.dll");
LoadNativeAssembly(nativeBinaryPath, "SqlServerSpatial120.dll");

}

sqlserverSpatial120.dll代表使用Sqlserver2014的sqlserverspatial功能,因为sqlserver是硬编码使用sqlserverspatial10或11的空间数据库功能,如果不指定版本,它默认去找sqlserverspatial10或11。

(2)在工程中,将sqlserverTypes文件夹中的SqlServerSpatial120.dll设置属性,“复制到输出目录”:始终复制。

(3)有以上设置后,开发时,可以正常使用dbGeography功能,但在部署时,还会提示无法找到sqlserverspatial10.dll,解决办法就是在配置文件中指定sqlserver Type的版本,在<runtime>配置节,添加以下属性设置:

<dependentAssembly>
<!--指定sqlserverType的版本-->
<assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="10.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>

提示:12.0.0代表sqlserver2014。

 

经过以上设置,开发和部署时,使用spatial功能时,就全解决了。

 

posted @   SimpleGIS  阅读(933)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示