zoukankan      html  css  js  c++  java
  • Entity Framework with NOLOCK

    /// <summary>
        /// 类似SqlServer nolock 查询扩展
        /// Like SqlServer Nolock
        /// </summary>
        public static class NoLockQuery
        {
            public static List<T> ToListReadUncommitted<T>(this IQueryable<T> query)
            {
                using (var scope = new TransactionScope(
                    TransactionScopeOption.Required,
                    new TransactionOptions()
                    {
                        IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted
                    }))
                {
                    List<T> toReturn = query.ToList();
                    scope.Complete();
                    return toReturn;
                }
            }
    
            public static int CountReadUncommitted<T>(this IQueryable<T> query)
            {
                using (var scope = new TransactionScope(
                    TransactionScopeOption.Required,
                    new TransactionOptions()
                    {
                        IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted
                    }))
                {
                    int toReturn = query.Count();
                    scope.Complete();
                    return toReturn;
                }
            }
    
            public static async Task<List<T>> ToListReadUncommittedAsync<T>(this IQueryable<T> query)
            {
                using (var scope = new TransactionScope(
                    TransactionScopeOption.Required,
                    new TransactionOptions()
                    {
                        IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted
                    },
                      TransactionScopeAsyncFlowOption.Enabled
                    ))
                {
                    List<T> toReturn = await query.ToListAsync();
                    scope.Complete();
                    return toReturn;
                }
            }
    
            public static async Task<int> CountReadUncommittedAsync<T>(this IQueryable<T> query)
            {
                using (var scope = new TransactionScope(
                    TransactionScopeOption.Required,
                    new TransactionOptions()
                    {
                        IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted
                    },
                     TransactionScopeAsyncFlowOption.Enabled
                    ))
                {
                    int toReturn = await query.CountAsync();
                    scope.Complete();
                    return toReturn;
                }
            }
        }
    项目中使用EntityFramework,可以使用下面这段代码进行nolock查询:需要添加System.Transactions程序集的引用

    如果封装的话,执行的时候,就需要传一个代码片段进去,委托在这种情况就派上用场了,我们可以使用委托来改进一下,也就是查询数据库时候的逻辑代码代由委托传递进去。
    public static void NoLockInvokeDB(Action action)
            {
                var transactionOptions = new System.Transactions.TransactionOptions();
                transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
                using (var transactionScope = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Required, transactionOptions))
                {
                    try
                    {
                        action();
                    }
                    finally
                    {
                        transactionScope.Complete();
                    }
                }
            }
    
    

    调用:

    NoLockInvokeDB(() =>
    {
       using (var db = new TicketDB())
       {
          lst = db.User.ToList();
       }
    });
  • 相关阅读:
    使用mongodb保存爬取豆瓣电影的数据
    使用scrapy爬取阳光热线问政平台
    使用scrapy爬取手机版斗鱼主播的房间图片及昵称
    使用selenium + chrome爬取中国大学Mooc网的计算机学科的所有课程链接
    使用scrapy爬取腾讯社招,获取所有分页的职位名称及chaolia、类型、人数、工作地点、发布日期超链接
    python2使用bs4爬取腾讯社招
    使用python2爬取百度贴吧指定关键字和分页帖子楼主所发的图片
    提问的智慧
    深刻理解系统架构师和系统分析师定义
    Redis基础数据结构与核心原理
  • 原文地址:https://www.cnblogs.com/Fooo/p/10282938.html
Copyright © 2011-2022 走看看