ASP.NET Core中怎么在ExceptionFilter异常过滤器中调用EF Core保存数据到数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011511086/article/details/80607066

参考代码:

using MatrixWebApiCore.Entity;
using Microsoft.EntityFrameworkCore;
using System; 
using System.Linq; 

namespace MatrixWebApiCore.Common.Data
{
    public class DataContext : DbContext
    {

        public DataContext(DbContextOptions<DataContext> options)
      : base(options)
        { }


        /// <summary>
        /// 报告实体,执行增删改查用
        /// </summary>
        public virtual DbSet<GroupCharts> GroupCharts { get; set; }
        public virtual DbSet<CombinationGroupCharts> CombinationGroupCharts { get; set; }
        /// <summary>
        /// 异常日志
        /// </summary>
        public virtual DbSet<Log> Log { get; set; }        
    }   
}

 public class ExceptionFilter : IExceptionFilter
{
   public void OnException(ExceptionContext context)
   {
        //方式一,不推荐这样写
        //var builder = new DbContextOptionsBuilder<DataContext>();
        //builder.UseSqlServer("数据库连接字符串");
        //DataContext dataContext = new DataContext(builder.Options);

        //方式二,推荐,获取Startup.cs里面已经注册的实例
        IWebHost host = Program.BuildWebHost(null);                   
        IServiceScope scope = host.Services.CreateScope();
        ILogRepository _logRepository = scope.ServiceProvider.GetService<ILogRepository>();
        DataContext _dataContext = scope.ServiceProvider.GetService<DataContext>();     

        ILogRepository logRepository = new LogRepository(dataContext);
        ILogRepository logRepository = new LogRepository();
        Log log = new Log();
        log.Id = Guid.NewGuid();
        log.RequestURL = url;
        log.LogTxt = context.Exception.ToString();
        log.CreateTime = DateTime.Now;
        _logRepository.Add(log);
        scope.Dispose();
    }
}

猜你喜欢

转载自blog.csdn.net/u011511086/article/details/80607066