我有一个应用程序,它利用get服务来获取数据的基础上,并需要将记录插入到Sql Server数据库。它需要检查表中是否存在唯一键,如果存在,则更新记录,如果不存在,则插入记录。
我需要一个解决方案,如合并在oracle数据库中,以消除对重复记录的思考,并像批量插入,在EF中一次插入所有数据。
我使用了AddRange和SaveChanges,但它在DB中使用了几次插入和更新,这需要很长时间才能完成。
发布于 2019-06-19 22:10:02
为此,有一个框架向EF添加了一些扩展方法。其名称是ZZZ Framework https://zzzprojects.com/。
为了加快插入的速度,您可以使用此框架中提供的BulkSaveChanges批量发送插入。这种方法将减少网络往返,并将显著提高存储性能
context.BulkSaveChanges();
context.BulkSaveChanges(options => options.BatchSize = 100)它还支持合并操作,类似于Oracle中提供的操作。
var bulk = new BulkOperation(connection);
bulk.BulkInsert(dt);
bulk.BulkUpdate(dt);
bulk.BulkDelete(dt);
bulk.BulkMerge(dt);发布于 2019-06-19 22:08:41
有免费的第三方NuGet包可以为您执行批量插入,例如https://www.nuget.org/packages/RudeySH.EFUtilities。但这并不完全是你想要的。
然后在https://entityframework-extensions.net/有一个很受欢迎的商业广告。它增加了对批量合并的支持。https://entityframework-extensions.net/bulk-merge。显然,使用情况取决于您的预算。
https://stackoverflow.com/questions/56669558
复制相似问题