EntityFramework优化:查询WITH(NOLOCK)

1.SQL Server查询中WITH(NOLOCK)

  SELECT语句中加上WITH(NOLOCK)为解决阻塞死锁。

  处理数据库死锁异常查询的一种方式是使用NOLOCK 或 READPAST。

    ◊ NOLOCK:可能显示没有提交事务的数据

    ◊ READPAST:不显示被事务锁住数据

1.1 没有提交的事务,NOLOCK 和 READPAST处理的策略

CREATE TABLE [dbo].[Role](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [RoleName] [nvarchar](100) NOT NULL,
    CONSTRAINT [PK_Role] PRIMARY KEY CLUSTERED 
    (
        [ID] ASC
    ))
BEGIN TRANSACTION 
INSERT INTO [dbo].[Role](RoleName) VALUES ('教师')

1.2 对被锁住的记录,NOLOCK 和 READPAST处理的策略

INSERT INTO [dbo].[Role](RoleName) VALUES ('教师'),('学生')
BEGIN TRANSACTION
UPDATE [dbo].[Role] SET [RoleName] = 'Teacher' WHERE ID = 1

2. EntityFramework查询WITH(NOLOCK)

using System;
using System.Transactions;

namespace Libing.App
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new LibingContext())
            {
                using (var ts = new TransactionScope(TransactionScopeOption.Required,
                    new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
                {
                    var role = context.Set<Role>().Find(1);
                }
            }
        }
    }
}

  使用TransactionScope来避免查询对于它所读取的表的锁定。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值