【发布时间】:2018-05-08 07:17:31
【问题描述】:
虽然我对 EF 中的事务有疑问,但这里可能使用了错误的措辞。我偶然发现的大多数答案和问题都声称您应该让默认 EF 处理事务。
就我而言,我需要(至少)查询数据库三次以获取某些数据。 重要的是,这些数据来自相同的状态,它将使用 saveChanges 在不同的调用/线程中插入到一个事务中。
因此,由于它们是多个表,并且某些数据位于列表中,因此某些数据位于单个对象/行中,因此我需要多个 select 语句。
我的想法是在读取期间使用事务。我的期望是检索到的数据可能已经过时,尽管这很好;或者在事务期间插入会导致事务回滚。
我的问题,我的假设是否正确?其次,这是要走的路吗?
对于我们普通的简单查询,如果不同的线程尝试插入数据,它们将被踢出。所以这是乐观的阅读我相信。
有人可以在这里填写吗?
【问题讨论】:
-
这取决于您的事务的事务隔离级别。虽然这种“在事务期间插入将导致事务回滚”永远不会发生(实际上没有什么可以回滚 - 你只读取,而不是修改数据)。
-
只有在事务超时时才会抛出异常(例如,因为您的插入非常长并且您将要选择锁定数据)。无论如何-将您的选择包装在事务中并选择适当的隔离级别(我认为应该是可重复读取)。并尝试尽快完成事务,因为它会阻止您的插入(并且插入会阻止选择)。
标签: c# sql-server entity-framework