NOLOCK和TransactionScope之间的区别是什么

本文关键字:区别 是什么 之间 TransactionScope NOLOCK | 更新日期: 2023-09-27 18:25:12

之间有什么区别

sqlCmd = "SELECT * FROM dbo.Products WITH (NOLOCK)";
List<Product> products = thisDl.ExecuteQuery<Product>(sqlCmd).ToList();
sqlCmd = "SELECT * FROM dbo.ProductItems WITH (NOLOCK)";
List<ProductItem> productItems = thisDl.ExecuteQuery<ProductItem>(sqlCmd).ToList();

和:

using (new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
{
    List<Product> products = (from p in dc.Products where select p).ToList();
    List<ProductItem> productItems = (from p in dc.ProductItems where select p).ToList();
}

在这两者中,哪个更好用?

NOLOCK和TransactionScope之间的区别是什么

对于您的语句,它们是相同的。现在TransactionScope是推荐使用的,据说NOLOCK是最后的手段。

NOLOCK表提示,也称为READUNCOMITTED,仅适用于SELECT语句。NOLOCK表示没有针对表发出共享锁,这将禁止其他事务修改表中的数据。

该语句的好处是它允许您防止数据库引擎对查询中的表发出锁;这增加了并发性和性能,因为数据库引擎不必维护所涉及的共享锁缺点是,由于该语句不对正在读取的表发出任何锁,因此可能会读取一些"脏"的未提交数据。

TransactionScope是一种更轻松、更快的方法,用于登记对事务中数据的修改。但TransactionScope更强大,它的掌握范围超出了数据库。TransactionScope可以在事务中登记其他东西,如COM+对象,您很快就会看到它与用于数据查询的LINQ一起出现,并在用于实体的ADO.NET中出现。TransactionScope:没有它就不要离开家。TransactionScope是支持数据库事务的一个进化步骤。也许这个想法是,一个更容易使用的事务模型将是一个将要使用的模型。