我们可以像这样使用SQL:
SELECT * FROM student WITH(NOLOCK);
如何在不使用TransactionScope
的情况下通过LINQ to SQL实现这一点?
SELECT * FROM student WITH(NOLOCK);
如何在不使用TransactionScope
的情况下通过LINQ to SQL实现这一点?
LINQ to SQL没有实现这种机制,但是你可以创建一个带有特定隔离级别的事务。请参考下面的代码:
using (var con = new SqlConnection("constr"))
{
con.Open();
using (var transaction = con.BeginTransaction(
IsolationLevel.ReadUncommitted))
{
using (var context = new SchoolDataContext(con))
{
// HACK: Setting the context.Transaction is
// needed in .NET 3.5 (fixed in .NET 4.0).
context.Transaction = transaction;
var q = from s in context.Students select c;
}
}
}
有时使用这种类型的隔离是很有用的,例如出于性能考虑。但请确保不要使用此类型的数据库隔离执行任何创建、更新或删除(CUD)操作。当然,这取决于您的情况,但您的数据可能会处于不一致的状态。