Linq to sql Linq数据上下文和隔离级别

Linq to sql Linq数据上下文和隔离级别,linq-to-sql,Linq To Sql,在没有添加特殊设置的情况下,如果最后只有一个submitchanges(),linq到sql datacontext的行为如何?我的数据库在mssql服务器上 我不知道交易到底在什么时候开始。考虑下面的伪夸张代码: DataContext dc= new DataContext(); Thread.Sleep(10 min); var rs = from a in dc.myTable Where.. select r; ............. ............. .........

在没有添加特殊设置的情况下,如果最后只有一个submitchanges(),linq到sql datacontext的行为如何?我的数据库在mssql服务器上

我不知道交易到底在什么时候开始。考虑下面的伪夸张代码:

DataContext dc= new DataContext();
Thread.Sleep(10 min);
var rs = from a in dc.myTable Where.. select r;
.............
.............
.............
use rs //but do nothing to edit myTable.May be loop over it(?) to force execution
.............
.............
Thread.Sleep(10 min);
//read again, same criteria as before
rs = from a in dc.myTable Where.. select r;
.............
.............

dc.SubmitChanges()
  • 如果我没有在任何地方显式更改任何设置,那么代码和数据库都会更改。即使其他人在表中插入(并提交)符合我的选择条件的新行,我的rs是否会在第二次返回相同的结果
  • linq的隐式事务何时/何时开始?当DataContext被实例化时正确吗?或者取决于我们在调用dc.SubmitChanges()时对DataContext执行(或不执行)什么操作
  • 当您没有在特定的隔离级别显式启动事务时,您的读取将在事务之外发生,并在默认的隔离级别上运行,我认为这是Read-Committed。如果在执行两个查询之间,其他用户插入了与您的条件匹配的其他记录,则它们将显示在第二个查询的结果中
  • 隐式事务在实际数据提交到数据库之前启动,并在提交之后立即提交。如果您多次调用
    SubmitChanges
    ,则每次调用都会有一个事务
  • 关于第一个问题:如果在事务中运行查询,请注意使用哪种隔离级别,以及如何设置表的锁定升级策略。默认情况下,如果使用(var scope=new TransactionScope()),则第一次查询将导致表被锁定。其他希望插入记录的用户将等待一段时间,并因超时而拒绝其操作。了解更多有关隔离级别的信息