使用Entity Framework执行原始SQL,直到SaveChanges才执行?

时间:2014-06-06 23:50:38

标签: c# entity-framework

使用实体框架我在循环中进行了大量数据更改并在最后调用SaveChanges(),但其中一个表具有Entity Framework不支持的数据类型我使用原始更新语句。这会导致两件事情发生:一,使用ExecuteSqlCommand()导致sql立即执行,被exec sp_reset_connection包围,这极大地影响了性能,另外两个,它不是创建的大事务的一部分按SaveChanges(),如果出现问题则不会简单地回滚。

我认为交易问题可以通过给予ExecuteSqlCommand()外部交易来解决,但仍有重大的性能损失。有趣的是,通过获取所有生成的sql字符串,将它们组合成一个带有StringBuilder的大型sql语句,然后在ExecuteSqlCommand()之前调用SaveChanges()一次,我获得了最佳性能。这个解决方案不容易让我参数化查询,并且会导致一个巨大的,奇怪的查询,其中包含代表所有值的大量对象。

那么我是否有内置的方式(甚至是一种方式)包含一些要包含在SaveChanges中的SQL?我尝试使用扩展方法进行操作,但在实体框架6中调用exec sp_reset_connection时,它看起来似乎无法执行ExecuteSqlCommand()

0 个答案:

没有答案