zoukankan      html  css  js  c++  java
  • EF语句拦截器-匹配当前的Controller,Action,User

    示例代码,ps:一切都能实现,关键是你尝试的方向,别把简单问题复杂化导致进入死胡同出不来。

    using Mobile360.Core.Interfaces;
    using Mobile360.Core.Models;
    using System;
    using System.Collections.Generic;
    using System.Data.Entity.Infrastructure.Interception;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace Mobile360.Data
    {
        /// <summary>
        /// 数据库执行拦截
        /// </summary>
        public class EFIntercepterLogging : DbCommandInterceptor
        {
           
            private readonly Stopwatch _stopwatch = new Stopwatch();
            private IRepository repo;
            public EFIntercepterLogging()
            {
                this.repo = DependencyResolver.Current.GetService<IRepository>();
            }
    
            public override void ScalarExecuting(System.Data.Common.DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
            {
                base.ScalarExecuting(command, interceptionContext);
                _stopwatch.Restart();
            }
            public override void ScalarExecuted(System.Data.Common.DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
            { 
                _stopwatch.Stop();
                AuditLog aLog = InitLog();
                
                if (interceptionContext.Exception != null)
                {
                    aLog.SqlQuery = (string.Format("Exception:{1} 
     --> Error executing command: {0}", command.CommandText, interceptionContext.Exception.ToString()));
                }
                else
                {
                    aLog.SqlQuery = (string.Format("
    执行时间:{0} 毫秒
    -->ScalarExecuted.Command:{1}
    ", _stopwatch.ElapsedMilliseconds, command.CommandText));
                }
    
                repo.Insert<AuditLog>(aLog);
                repo.SaveChangesAsync();
    
                base.ScalarExecuted(command, interceptionContext);
            }
            public override void NonQueryExecuting(System.Data.Common.DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
            {
                base.NonQueryExecuting(command, interceptionContext);
                _stopwatch.Restart();
            }
            public override void NonQueryExecuted(System.Data.Common.DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
            {
                _stopwatch.Stop();
                AuditLog aLog = InitLog();
    
                if (interceptionContext.Exception != null)
                {
                    aLog.SqlQuery = (string.Format("Exception:{1} 
     --> Error executing command:
     {0}", command.CommandText, interceptionContext.Exception.ToString()));
                }
                else
                {
                    aLog.SqlQuery = (string.Format("
    执行时间:{0} 毫秒
    -->NonQueryExecuted.Command:
    {1}", _stopwatch.ElapsedMilliseconds, command.CommandText));
                }
                repo.Insert<AuditLog>(aLog);
                repo.SaveChangesAsync();
    
                base.NonQueryExecuted(command, interceptionContext);
            }
            public override void ReaderExecuting(System.Data.Common.DbCommand command, DbCommandInterceptionContext<System.Data.Common.DbDataReader> interceptionContext)
            {
                base.ReaderExecuting(command, interceptionContext);
                _stopwatch.Restart();
            }
            public override void ReaderExecuted(System.Data.Common.DbCommand command, DbCommandInterceptionContext<System.Data.Common.DbDataReader> interceptionContext)
            {
                _stopwatch.Stop();
                AuditLog aLog = InitLog();
    
                if (interceptionContext.Exception != null)
                {
                    aLog.SqlQuery = (string.Format("Exception:{1} 
     --> Error executing command:
     {0}", command.CommandText, interceptionContext.Exception.ToString()));
                }
                else
                {
                    aLog.SqlQuery = (string.Format("
    执行时间:{0} 毫秒 
     -->ReaderExecuted.Command:
    {1}", _stopwatch.ElapsedMilliseconds, command.CommandText));
                }
                repo.Insert<AuditLog>(aLog);
                repo.SaveChangesAsync();
    
                base.ReaderExecuted(command, interceptionContext);
            }
    
            private AuditLog InitLog()
            {
                AuditLog log = new AuditLog();
    
                HttpContextBase context = new HttpContextWrapper(HttpContext.Current);
                RouteData rd = RouteTable.Routes.GetRouteData(context);
                if (rd != null)
                {
                    string controllerName = rd.GetRequiredString("controller");
                    string actionName = rd.GetRequiredString("action");
                    string userName = HttpContext.Current.User.Identity.Name;
    
                    log.Controller = controllerName;
                    log.Action = actionName;
                    log.StartTime = DateTime.Now;
                    log.EndTime = DateTime.Now;
                    log.AuditAccount = userName;
    
                }
                return log;
            }
        }
    }
  • 相关阅读:
    测试必备基础知识总结
    初级测试工程师与高级测试工程师的区别
    调试Java程序持续占cpu问题
    Spring Struts Hibernate trouble shooting | 一些问题的记载
    MySQL 性能调优之查询优化
    Tomcat性能调优 | Tomcat Performance Tuning
    Tomcat配置、管理和问题解决 | Tomcat Configuration, Manangement and Trouble Shooting
    SWT Browser & XULRunner
    Windows应用安装制作工具调查报告
    CentOS Configuration | CentOS配置
  • 原文地址:https://www.cnblogs.com/x-poior/p/7081549.html
Copyright © 2011-2022 走看看