实体框架查询执行结果

时间:2012-10-25 13:24:23

标签: entity-framework

我们正在考虑将Entity Framework用于批量上传作业。因为我们有兴趣跟踪每个记录的单个结果,所以我试图找出是否所有插入的项都是作为事务的一部分完成的,如果单个故障会导致回滚,或者是否有办法跟踪结果每个结果的结果。

我正在考虑循环遍历项目并在每个项目上调用Save()并将其包装在try / catch块中,但如果我可以使用单个结果,则只需在上下文中调用save()就会更有效。 / p>

谢谢!

1 个答案:

答案 0 :(得分:3)

默认情况下,每次调用SaveChanges时,所有待处理的记录都会立即保存。 SaveChanges调用中的所有操作都在事务(source)内,因此如果特定的SaveChanges调用失败,它将回滚该特定调用中的查询,但显然不是先前成功的调用。

最终,这取决于你调用SaveChanges的地方,你会得到多少回滚。您可以使用TransactionScope扩展交易的长度,请参阅this article,了解有关如何扩展范围的一些示例。

我自己的经验是,过于频繁地调用SaveChanges可以真正降低性能,并使整个过程减慢很多。但显然等待太久可能意味着更大的内存占用。我发现EF可以很容易地处理几千行而没有太多的内存问题。

将代码放在try ... catch中会对您有所帮助,但您可能希望查看实体验证,因为您可以对对象设置限制,然后在生成任何SQL之前对对象进行验证。