需要使用实体框架将大量记录插入数据库中

时间:2019-06-19 14:02:56

标签: c# entity-framework

我有一个利用Web服务定期获取数据的应用程序,需要将记录插入到Sql Server数据库中。它需要检查表是否存在唯一键,如果存在,则必须更新记录,否则,应该插入记录。

我需要像在Oracle数据库中合并这样的解决方案,以消除对重复记录的思考,而无需像在EF中批量插入那样就可以一次插入所有数据。

我使用了AddRange和SaveChanges,但是它在数据库中使用了多个插入和更新,这需要很长时间才能完成。

2 个答案:

答案 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);