使用实体框架我在循环中进行了大量数据更改并在最后调用SaveChanges()
,但其中一个表具有Entity Framework不支持的数据类型我使用原始更新语句。这会导致两件事情发生:一,使用ExecuteSqlCommand()
导致sql立即执行,被exec sp_reset_connection
包围,这极大地影响了性能,另外两个,它不是创建的大事务的一部分按SaveChanges()
,如果出现问题则不会简单地回滚。
我认为交易问题可以通过给予ExecuteSqlCommand()
外部交易来解决,但仍有重大的性能损失。有趣的是,通过获取所有生成的sql字符串,将它们组合成一个带有StringBuilder的大型sql语句,然后在ExecuteSqlCommand()
之前调用SaveChanges()
一次,我获得了最佳性能。这个解决方案不容易让我参数化查询,并且会导致一个巨大的,奇怪的查询,其中包含代表所有值的大量对象。
那么我是否有内置的方式(甚至是一种方式)包含一些要包含在SaveChanges
中的SQL?我尝试使用扩展方法进行操作,但在实体框架6中调用exec sp_reset_connection
时,它看起来似乎无法执行ExecuteSqlCommand()
。