NET Core 8 DbGeometry 支持

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

我的任务是将 .NET Framework 4.5 系统转换为 .NET Core 8。因此,我为现有项目创建了新的 .NET Core 8 版本。除了一件事之外,一切都进展顺利。 SQL Server 数据库字段之一是几何类型。我在这个领域遇到了麻烦。我使用 EF Core Power Tools 对表类进行逆向工程。我使用“映射”下的“地图空间类型”选项来选取几何字段。效果很好。

出现错误的一行是:

// Initialize CLR Types for SQL Server
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

这会出现错误:

当前上下文中不存在名称“SqlServerTypes”

新旧版本均使用Nuget包

Microsoft.SqlServer.Types.

这个方法又出现一个错误:

    private static DbGeometry GetGeometry(string wkt)
    {
        DbGeometry result = null;

        try
        {
            result = DbGeometry.FromText(wkt, SRID);
        }
    }

它给出了这些错误:

名称“DbGeometry”在当前上下文中不存在 找不到类型或命名空间名称“DbGeometry”(您是否缺少 using 指令或程序集引用?)

最终的错误涉及到这段代码:

        else
        {
            string wkt = jam.GetLineString(AppSettings.GeoLinePercision);
            tj.GEOM_LINWRK = GetGeometry(wkt);
        }

它给出了错误:

无法将类型“System.Data.Spatial.DbGeometry”隐式转换为“NetTopologySuite.Geometries.Geometry”

旧版本有using语句:using

System.Data.Entity.Spatial;
我找不到NET CORE 8类似的using。

关于这一点,我在网上看到很多帖子说 NET Core 不支持空间类型。但有些帖子已经有五年以上的历史了。我不敢相信 NET Core 现在还不支持它们。我什至尝试过制作 NET Core 6 版本的项目,但仍然遇到相同的错误。

一位同事提到我可能需要安装一个补丁来允许 Visual Studio 22 识别空间类型。我依稀记得几年前为 VS 19 或更早版本做过这些。如果这是解决方案,我不知道从哪里得到它。

此外,之前版本的数据库类将几何字段定义为 dbgeometry。该类有

using system.data.Entity.Spatial
语句。 EF Core 扩展生成的类将其定义为 Geometry 并具有
enter code here
using nettopologysuite.geometries
声明。一种是 VS 建议的修复说添加对 System.Data.Entity.dll 的引用。但根据我的理解,那是一个 .NET Framework 4.5 dll。

有什么想法吗?

sql-server visual-studio .net-core geometry
1个回答
0
投票

当我从 .NET Framework 升级到 .NET 6 时,我发现无法使用 SqlServerTypes、DbGeometry、System.Data.Entity.Spatial 或 System.Data.Entity.dll。

有效的解决方案是安装 Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite,并使用 NetTopologySuite 中的 Geometry 类。我摆脱了使用 System.Data 命名空间的所有内容,并重建了使用 DbGeometry 的函数。

© www.soinside.com 2019 - 2024. All rights reserved.