linq to sql,DataContext中的隔离级别

MAN*_*NGA 2 .net c# linq linq-to-sql

需要有关linq的Dbml文件的建议,我们有大量数据的数据库.有些时候表中有锁.所以我们需要在dbml类上应用隔离级别,读取uncommited(我们知道这个隔离级别的一些缺点).

我在dbml文件中将代码下面的苹果作为分部类

partial class MainDataContext
{
  public MainDataContext()
  {
      base.Connection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted);
  } 
}
Run Code Online (Sandbox Code Playgroud)

这是一种正确的实施方式吗?或者对它提出任何拙劣的建议.

谢谢

Mar*_*ell 5

如果你这样做,你需要将事务附加到该连接上的每个命令,这不是LINQ-to-SQL将要为你做的事情(虽然有办法让它知道一个事务实例).也许有一个选择是使用接受连接的重载,并简单地提供一个已经打开的连接,在该连接上你已经通过以下方式踩踏了隔离级别:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Run Code Online (Sandbox Code Playgroud)

当然,如果你这样做 - 那么现在你的工作是在完成后正确处理连接:LINQ-to-SQL将假设你正在管理连接生命周期.

LINQ-to-SQL数据上下文的另一个选择是使用该ExecuteQuery<T>(sql, args)方法,它允许您传入自己的原始TSQL - 这显然意味着您不再使用LINQ,但它允许您添加NOLOCK等等几乎没有战术意义的地方(只使用物化器的数据上下文).这更精细,并允许您专注于高吞吐量/高度并发的表.