0

有没有一种使用 Entity Framework Core 将 SQL 空间 CurvePolygon 几何列转换为简单多边形的好方法?NetTopologySuite 不支持 CurvePolygon 类型,因此我正在寻找一种在我的 .Net Core 客户端中读取/写入此列的方法。

背景: 我有一个 SQL 空间数据库,它使用 CurvePolygons 来描述圆。Entity Frame Core 5.0.6 和 NetTopologySuite 2.1.0 用于通过使用 EF Core Power Tools 对现有数据库进行逆向工程的代码优先模型来访问数据库。当几何列包含多边形时,代码按预期工作。但是,当我阅读 CurvePolygon 列时,代码无法尝试加载 SqlServerTypes.dll(可能是 .Net Core 应用程序甚至不应该使用的后备路径。)

目标: 我可以使用数据库中的计算列以及 CurvePolygon 形状的中心和半径轻松地重新创建这些圆。读取时一个合理的解决方法是将 CurvedPolygons 转换为近似圆形的多边形。在写入时,一个选项是生成一个描述圆的 OpenGIS 字符串并写入它而不是近似的圆多边形。

在最坏的情况下,我认为我有一个触发器,可以在写入时将 Polygons 转换为 CurvePoly,然后查看排除几何体的表格视图,然后在第二次行程中获取非曲线几何体,但这些选项都感觉不是很好。我希望在某个地方我可以注册一个没有出现在我的搜索中的适配器类......

下面是生成的代码第一表的简化版本:

[Table("Location")] 
[Index(nameof(VolumeShape), Name = "VolumeShape_Index")] 
public partial class Location
{
    public Location()
    {
    }

    [Key]
    [Column("ID")]
    public long Id { get; set; }

    /// <summary>
    /// 0 = Point, 1 = Circle, 2=Ellipse (Unused), 3 =PolyLine, 4=Polygon
    /// </summary>
    public short TypeCode { get; set; }

    [Required]
    [Column(TypeName = "geometry")]
    public Geometry VolumeShape { get; set; }

    //Computed column, center of Geometric shape
    public double X { get; set; }

    //Computed column, center of Geometric shape
    public double Y { get; set; }

    
    /// <summary>
    /// Computed column, returns the radius of a circle with equal area to the  volume shape's polygonal area (if volume shape is a 2D shape), required for backwards compatibility
    /// </summary>
    public double Radius { get; set; }
} 

谢谢你的帮助

4

0 回答 0