C# 如何实现此命令以防止LINQ到SQL的死锁?
我想在使用LINQ to 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
设置事务隔离级别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语句。我喜欢本文中创建基类的想法,该基类将为您设置所需的事务隔离级别。在我看来,这个特性应该包含在框架中