gpt4 book ai didi

c# - .NET Core 中使用 NTS 几何体批量插入

转载 作者:行者123 更新时间:2023-12-03 08:19:03 32 4
gpt4 key购买 nike

您可能知道,当您尝试插入大量行时,以“ Entity Framework ”方式将数据插入表中的速度非常慢。另一种方法是使用 SqlBulkCopy,它可以很好地提高性能。问题是 SqlBulkCopy(根据我阅读和测试的内容)不支持 .NET Core 中的 SQL 几何类型。

这是在 EF Core 中,C# 属性类型是无法更改的 NTS 几何图形。

不能选择使用旧库 Microsoft.SqlServer.Types,因为它们在 .NET Core 中不起作用。数据当前作为 NTS Geometry 从另一个 SQL Server 数据库加载。

有人找到插入多行的有效方法吗?

最佳答案

免责声明:我是 linq2db 和扩展 linq2db.EntityFrameworkCore 的创建者之一

linq2db 本身不依赖于 NetTopologySuite,因此库应该知道如何转换此类类型。每个应用程序一次配置它们(我希望涵盖所有内容):

var writer = new NetTopologySuite.IO.SqlServerBytesWriter() { IsGeography = true };

MappingSchema.Default.SetConverter<Point, DataParameter>(p => new DataParameter(null, writer.Write(p), DataType.Udt));
MappingSchema.Default.SetConverter<Polygon, DataParameter>(p => new DataParameter(null, writer.Write(p), DataType.Udt));
MappingSchema.Default.SetConverter<GeometryCollection, DataParameter>(p => new DataParameter(null, writer.Write(p), DataType.Udt));
MappingSchema.Default.SetConverter<LinearRing, DataParameter>(p => new DataParameter(null, writer.Write(p), DataType.Udt));
MappingSchema.Default.SetConverter<LineString, DataParameter>(p => new DataParameter(null, writer.Write(p), DataType.Udt));
MappingSchema.Default.SetConverter<MultiLineString, DataParameter>(p => new DataParameter(null, writer.Write(p), DataType.Udt));
MappingSchema.Default.SetConverter<MultiPoint, DataParameter>(p => new DataParameter(null, writer.Write(p), DataType.Udt));
MappingSchema.Default.SetConverter<MultiPolygon, DataParameter>(p => new DataParameter(null, writer.Write(p), DataType.Udt));

然后您可以对具有任何几何属性的任何实体使用BulkCopy:

context.BulkCopy(someEntities);

关于c# - .NET Core 中使用 NTS 几何体批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68377899/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com