我有一个利用Web服务定期获取数据的应用程序,需要将记录插入到Sql Server数据库中。它需要检查表是否存在唯一键,如果存在,则必须更新记录,否则,应该插入记录。
我需要像在Oracle数据库中合并这样的解决方案,以消除对重复记录的思考,而无需像在EF中批量插入那样就可以一次插入所有数据。
我使用了AddRange和SaveChanges,但是它在数据库中使用了多个插入和更新,这需要很长时间才能完成。
答案 0 :(得分:2)
有免费的第三方NuGet软件包可以为您批量插入,例如https://www.nuget.org/packages/RudeySH.EFUtilities。但这不完全是您要的。
然后在https://entityframework-extensions.net/有一个受欢迎的商业广告。它增加了对批量合并的支持。 https://entityframework-extensions.net/bulk-merge。显然,使用情况取决于您的预算。
答案 1 :(得分:2)
有一个为此添加了一些扩展方法到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);