是否可以在使用.NET 4.8的ASP.NET应用程序中使用SQL Server 2017的地理数据类型?

问题描述 投票:1回答:1

我无法在ASP.NET应用程序中配置为在SQL Server 2017中使用具有Geography数据类型的数据库。

在我的另一个问题中,我概述了各种行不通的解决方法。链接:SO Question

任何人都可以在ASP.NET应用程序中的SQL Server 2017中成功使用Geography类型进行确认。如果是,那么配置是什么?

唯一的解决方法是将geography数据转换为字符串,然后在客户端上反序列化,这是一种处理问题的可怕方法...

asp.net .net sql-server datareader
1个回答
0
投票

我在解决方案中使用了OData v4 API,该解决方案使农民可以绘制其农场和牧场的地图,他们可以在这些地图上放置门。

在模型中,将System.Data.Entity.Spatial.DbGeography用作要在SQL中成为Geography的字段的数据类型

在我们的解决方案中,围场以[[POLYGON和MULTIPOLYGON存储在DbGeography字段中,门以POINT的形式存储在DbGeography字段中。我们可以在边界框中查询所有围场,计算面积和距离...几乎所有客户可以向我们抛出的地理空间查询...

值得注意的当前软件包(但是同一软件包的先前版本已在去年运行):

    实体框架6.4.0
  • Microsoft.AspNet.OData 7.3.0
  • Microsoft.AspNet.WebApi 5.2.7
  • Microsoft.Spatial 7.6.2
  • Microsoft.SqlServer.Types 14.0.1016.290
  • Newtonsoft.Json 12.0.1
  • 如果您需要与GeoJSON源进行接口,无论是导入还是导出,我也都使用这些包,但是您应该能够在不包含它们的情况下编写包含的应用程序:

      GeoJSON.Net 1.1.72
  • GeoJSON.Net.Contrib.EntityFramework 0.1.3
  • GeoJSON.Net.Contrib.MsSqlSpatial 0.3.2
  • [GeoJSON.Net.Contrib.Wkb 0.1.3
  • OData序列化程序在序列化或反序列化这些类型时没有引起任何麻烦,对其中一个边界的查询将返回以下内容:

    { "@odata.context": ".../$metadata#Paddocks(17518)/Perimeter", "Geography": { "CoordinateSystemId": 4326, "WellKnownText": "POLYGON ((145.27786016464236 -37.855119294600946, 145.27687250851116 -37.855329119608058, 145.276149480753 -37.855902375057504, 145.27588481613736 -37.856685463693672, 145.2761494445584 -37.857468560509645, 145.27687247231654 -37.85804183231879, 145.27786016464236 -37.858251665505662, 145.27884785696818 -37.85804183231879, 145.27957088472633 -37.857468560509659, 145.27983551314736 -37.856685463693672, 145.27957084853173 -37.855902375057504, 145.27884782077356 -37.855329119608058, 145.27786016464236 -37.855119294600946))" } }

    如果在客户端使用Geography数据类型时遇到麻烦,您将找到它的正确语法,可以克服这种语法,但是您需要发布遇到的更多特定问题,您可能会发现更多的工具和通用支持(如果您在客户端使用GeoJSON),则诸如leaflet js之类的映射组件本机使用

    GeoJSON

  • ,因此,如果您从头开始使用映射解决方案,则可能会发现直接进行GeoJSON集成更容易。
    在我的另一个问题中,我概述了各种行不通的解决方法

    由于您未包含任何回溯到先前问题的链接,所以我不确定您先前与之相关的问题是什么,但是我希望这使您有信心继续坚持您的解决方案。


    更新

    而不是遵循有关SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));的建议

    我在部署过程中将dll类型的x86版本手动复制到bin文件夹中(因为服务器运行的是32位IIS。如果您的服务器以64位模式运行,请使用x64版本)

    我还在web.config中添加了此绑定重定向:

    <assemblyBinding> <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="10.0.0.0" newVersion="14.0.0.0" /> </dependentAssembly> </assemblyBinding>

    连接字符串或其他任何东西都没有什么特别的。
    最新问题
    © www.soinside.com 2019 - 2024. All rights reserved.