我正在 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 服务,以防有人想知道)。任何指针?