C# 使用实体进行批量更新

C# 使用实体进行批量更新,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我必须更新数据库中的5000行。我所做的是将它们从数据库加载到实体上下文,然后更改属性值,然后调用SaveChanges(),但问题是,当我调用SaveChanges()时,update语句会一个接一个地执行,每个update语句只需一次到数据库的行程,大约需要40毫秒,40毫秒x 5000条记录需要200秒。。。是否有任何方法可以将批量更新发送到数据库,在一次数据库旅行中多次更新…我找到了一个解决方案。以下是指向批量插入的实体扩展的链接: 若您需要批量更新,您可以将批量插入到某个临时表中,然后

我必须更新数据库中的5000行。我所做的是将它们从数据库加载到实体上下文,然后更改属性值,然后调用SaveChanges(),但问题是,当我调用SaveChanges()时,update语句会一个接一个地执行,每个update语句只需一次到数据库的行程,大约需要40毫秒,40毫秒x 5000条记录需要200秒。。。是否有任何方法可以将批量更新发送到数据库,在一次数据库旅行中多次更新…

我找到了一个解决方案。以下是指向批量插入的实体扩展的链接:
若您需要批量更新,您可以将批量插入到某个临时表中,然后调用存储过程,该存储过程通过连接该临时表进行更新。

我找到了一个解决方案。以下是指向批量插入的实体扩展的链接:
如果需要大容量更新,可以将大容量插入到某个临时表中,然后调用通过与该临时表联接进行更新的存储过程。

对于此特定任务,最好不要使用EF。但是,您可以从EF获取基础数据库连接,然后只执行您自己的SQL。重复几个其他问题,即,不使用EF执行此特定任务可能更好。但是,您可以从EF获得基础数据库连接,然后只执行您自己的SQL.Duplicate(SQL.Duplicate),这是几个其他问题的重复,即扩展没有做您认为它做的事情。它将实体转换为数据表,然后使用SqlBulkCopy执行实际的大容量插入。最好完全避免EF,直接加载数据表。EF只增加了这个场景的开销,实际上它做了我想做的和我需要的。它将实体列表作为参数,并以大容量插入的方式将其快速插入到数据库中。该扩展并不像您想象的那样。它将实体转换为数据表,然后使用SqlBulkCopy执行实际的大容量插入。最好完全避免EF,直接加载数据表。EF只增加了这个场景的开销,实际上它做了我想做的和我需要的。它将实体列表作为参数,并以批量插入的方式将其快速插入到数据库中。