我想在我的项目中使用LINQ to SQL实现SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
。我的理解是,这将影响全局的所有select语句。
我把它放在包含上下文对象的DAL中吗?如果是这样,怎么样?
谢谢! 标记
答案 0 :(得分:2)
您可以按照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语句。
答案 1 :(得分:1)
尝试在整个数据库上设置READ COMMITTED SNAPSHOT。
见这里:http://www.codinghorror.com/blog/2008/08/deadlocked.html
答案 2 :(得分:1)
严格地说,Linq不是数据库查询语言。它是一种域查询语言,可以转换为SQL查询语言,如SQL。因此,您不能仅使用Linq来设置数据库隔离级别。
我会看看你的ORM给你的工具;大多数,在某种程度上,涉及ADO风格的SQLConnection和SQLTransactions。您应该能够公开给定ORM的“会话”对象,以便设置隔离级别并执行其他非DML数据库命令。
答案 3 :(得分:1)
我喜欢本文中有关创建基类的想法,该基类将为您设置所需的事务隔离级别。在我看来,这个功能应该包含在框架中。