C# 原子事务中的EF多选择查询

C# 原子事务中的EF多选择查询,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,虽然我有一个关于EF交易的问题,但这里可能使用了错误的措辞。我偶然发现的大多数答案和问题都声称,您应该让默认EF处理事务 在我的例子中,我需要查询数据库(至少)三次以获取某些数据。 重要的是,这些数据来自相同的状态,它将在不同的调用/线程中使用saveChanges插入到一个事务中 因此,由于它们是多个表,一些数据出现在一个列表中,一些数据出现在单个对象/行中,所以我需要多个select语句 我的想法是在读取期间使用事务。我的期望是,检索到的数据可能已经过时,尽管这很好;或者在事务期间,插入将导

虽然我有一个关于EF交易的问题,但这里可能使用了错误的措辞。我偶然发现的大多数答案和问题都声称,您应该让默认EF处理事务

在我的例子中,我需要查询数据库(至少)三次以获取某些数据。 重要的是,这些数据来自相同的状态,它将在不同的调用/线程中使用saveChanges插入到一个事务中

因此,由于它们是多个表,一些数据出现在一个列表中,一些数据出现在单个对象/行中,所以我需要多个select语句

我的想法是在读取期间使用事务。我的期望是,检索到的数据可能已经过时,尽管这很好;或者在事务期间,插入将导致事务回滚

我的问题是,我的假设正确吗?第二,这是要走的路吗

对于普通的简单查询,如果不同的线程尝试插入数据,它们将被踢出。所以我相信这是乐观的解读


有人能在这里告诉我吗?

您当然可以使用EF的事务,尽管它不那么简单,而且常常是不必要的

你需要使用这个方法来启动它。此方法采用一个参数来确定锁定、脏读等


有关隔离级别的更多信息,请参阅

,它取决于事务的事务隔离级别。虽然“在事务期间,插入将导致事务回滚”这种情况永远不会发生(实际上没有什么要回滚的-您只读取数据,不修改数据)。只有在事务超时时才会引发异常(例如,您的插入非常长,并且您将要选择的数据被锁定)。无论如何-在事务中包装您的选择,并选择适当的隔离级别(我认为可以重复读取)。并尽可能快地完成事务,因为它会阻止您的插入(插入将阻止选择)。是的-我完全不知道混沌隔离…在某些时候使用了大多数其他的