zoukankan      html  css  js  c++  java
  • DbCommandInterceptor抓取EF执行时的SQL语句

    EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以允许我们更加方便的了解到EF运行时的一些信息,当然我们最想看的还是EF生成的Sql语句,话不多讲,开始干吧;

        /// <summary>
        /// 抓取EF执行时的SQL语句
        /// </summary>
        public class EFIntercepterLogging : DbCommandInterceptor
        {
            private readonly Stopwatch _stopwatch = new Stopwatch();
    
            public override void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
            {
                base.ScalarExecuting(command, interceptionContext);
                _stopwatch.Restart();
            }
    
            public override void ScalarExecuted(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
            {
                _stopwatch.Stop();
                if (interceptionContext.Exception != null)
                {
                    Trace.TraceError("Exception:{1} 
     --> Error executing command: {0}", command.CommandText, interceptionContext.Exception.ToString());
                }
                else
                {
                    Trace.WriteLine("线程:" + System.Threading.Thread.CurrentThread.ManagedThreadId);
                    Trace.TraceInformation("
    执行时间:{0} 毫秒
    -->ScalarExecuted.Command:{1}
    ", _stopwatch.ElapsedMilliseconds, command.CommandText);
                }
                base.ScalarExecuted(command, interceptionContext);
            }
    
            public override void NonQueryExecuting(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
            {
                base.NonQueryExecuting(command, interceptionContext);
                _stopwatch.Restart();
            }
    
            public override void NonQueryExecuted(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
            {
                _stopwatch.Stop();
                if (interceptionContext.Exception != null)
                {
                    Trace.TraceError("Exception:{1} 
     --> Error executing command:
     {0}", command.CommandText, interceptionContext.Exception.ToString());
                }
                else
                {
                    Trace.TraceInformation("
    执行时间:{0} 毫秒
    -->NonQueryExecuted.Command:
    {1}", _stopwatch.ElapsedMilliseconds, command.CommandText);
                }
                base.NonQueryExecuted(command, interceptionContext);
            }
    
            public override void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
            {
                //command.CommandText += " AND 1=1";
                base.ReaderExecuting(command, interceptionContext);
                _stopwatch.Restart();
            }
    
            public override void ReaderExecuted(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
            {
                _stopwatch.Stop();
                if (interceptionContext.Exception != null)
                {
                    Trace.TraceError("Exception:{1} 
     --> Error executing command:
     {0}", command.CommandText, interceptionContext.Exception.ToString());
                }
                else
                {
                    Trace.WriteLine("线程:" + System.Threading.Thread.CurrentThread.ManagedThreadId);
                    Trace.TraceInformation("
    执行时间:{0} 毫秒 
     -->ReaderExecuted.Command:
    {1}", _stopwatch.ElapsedMilliseconds, command.CommandText);
                }
                base.ReaderExecuted(command, interceptionContext);
            }
        }
    //EF监控
    DbInterception.Add(new EFIntercepterLogging());
  • 相关阅读:
    晃动提示效果
    弹出框(dialog)制作
    日期选择组件
    背景图合并
    css小常识
    学习总结
    新学习的开始
    河马搞笑GIF动态图网站(http://gif.hemaj.com)上线,老司机快上车!
    新项目上线,河马体育(http://www.hemaj.com)-足球即时比分、足球比分、足球比分直播、足球直播
    正规表达
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/6305816.html
Copyright © 2011-2022 走看看