3

我正在 ASP.NET Core 中开发 Web API,我们发现自己需要为大型批量插入操作运行后台任务。但是,我插入的模型包含.NET Topology SuiteGeometry类型的属性。

public class GeometricData
{
    //...

    public Geometry Geometry { get; set; }
}

为了批量插入,我遵循我在这里找到的一种方法,它的性能非常好,但它的实现超出了这个问题的范围。尽管速度很快,但例如用户可能一次插入超过一百万条记录,因此我们决定将此处理移至后台任务。Hangfire扩展一开始看起来可以为我们节省大量时间,但它似乎不能很好地处理这种Geometry类型。在下面的代码中,该BackgroundTask方法也可能是一个空方法:

public Task BulkInsert(IEnumerable<GeometricData> list)
{
    BackgroundJob.Enqueue(() => BackgroundTask(list));

    return Task.CompletedTask;
}   

只是将列表Geometry作为参数传递BackgroundTask给操作 for 的行为Enqueue将引发不幸的错误:

Self referencing loop detected for property 'CoordinateValue' with type 'NetTopologySuite.Geometries.Coordinate'. Path '[0].Geometry.Coordinates[0]'.

事实上,Coordinates(一个 NTS 类)确实引用了自己:

在此处输入图像描述

不知道他们为什么要这样做,但他们做到了。无论如何,到目前为止一切都很好,但是除非我设法找到解决方案(或者甚至可以解决它),否则我将在从头开始实施后台工作人员时遇到一堆麻烦(我'将使用 Worker 服务,以防有人想知道)。任何指针?

4

1 回答 1

0

伙计,在几何和坐标上方添加 JsonIgnoreAttribute,另外:检查以下链接:newtonsoft.com/json/help/html/PropertyJsonIgnore.htm

于 2021-03-09T21:02:39.297 回答