C# 如何实现此命令以防止LINQ到SQL的死锁?

C# 如何实现此命令以防止LINQ到SQL的死锁?,c#,.net,linq-to-sql,C#,.net,Linq To Sql,我想在使用LINQ to SQL的项目中实现设置事务隔离级别READ UNCOMMITTED。我的理解是,这将影响全球所有select语句 我是否将其放入包含上下文对象的DAL中?如果是,怎么做 谢谢! 标记尝试在整个数据库上设置读取提交的快照 请参见此处:严格来说,Linq不是数据库查询语言。它是一种域查询语言,可以转换为SQL之类的DB查询语言。因此,不能仅使用Linq来设置数据库隔离级别 我会看看你的ORM给你的工具;在某种程度上,大多数涉及ADO样式的SQLConnection和SQLT

我想在使用LINQ to SQL的项目中实现
设置事务隔离级别READ UNCOMMITTED
。我的理解是,这将影响全球所有select语句

我是否将其放入包含上下文对象的DAL中?如果是,怎么做

谢谢!
标记

尝试在整个数据库上设置读取提交的快照


请参见此处:

严格来说,Linq不是数据库查询语言。它是一种域查询语言,可以转换为SQL之类的DB查询语言。因此,不能仅使用Linq来设置数据库隔离级别


我会看看你的ORM给你的工具;在某种程度上,大多数涉及ADO样式的SQLConnection和SQLTransactions。给定ORM的“会话”对象,您应该能够公开这些命令,以便设置隔离级别并执行其他非DML数据库命令。

您可以在每个
DataContext
/工作单元的基础上这样做:

using (var con = new SqlConnection(constr))
{
    con.Open();

    using (var tran = 
        new con.BeginTransaction(IsolationLevel.ReadUncommitted))
    {
        using (var db = new MyDataContext(con))
        {
            // You need to set the transaction in .NET 3.5 (not in 4.0).
            db.Transaction = tran;

            // Do your stuff here.

            db.SubmitChanges();
        }

        tran.Commit();
    }
}
当然,您可以将连接和事务的创建、提交和处理抽象出来,但是这个示例可以工作


请注意,这不会全局设置隔离级别,只针对在该特定
DataContext
类的上下文中执行的LINQ语句。

我喜欢本文中创建基类的想法,该基类将为您设置所需的事务隔离级别。在我看来,这个特性应该包含在框架中