EF Code 如何输出sql语句

首先写拷贝下面类

    public class EFLoggerProvider : ILoggerProvider
    {
        public ILogger CreateLogger(string categoryName) => new EFLogger(categoryName);
        public void Dispose() { }
    }

    public class EFLogger : ILogger
    {
        private readonly string categoryName;

        public EFLogger(string categoryName) => this.categoryName = categoryName;

        public bool IsEnabled(LogLevel logLevel) => true;

        public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
        {
            //ef core执行数据库查询时的categoryName为Microsoft.EntityFrameworkCore.Database.Command,日志级别为Information
            if (categoryName == "Microsoft.EntityFrameworkCore.Database.Command"
                    && logLevel == LogLevel.Information)
            {
                var logContent = formatter(state, exception);
                //TODO: 拿到日志内容想怎么玩就怎么玩吧
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine(logContent);
                Console.ResetColor();
            }
        }

        public IDisposable BeginScope<TState>(TState state) => null;
    }

然后在dbcontext里面,应用日志

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            var loggerFactory = new LoggerFactory();
            loggerFactory.AddProvider(new EFLoggerProvider());
            optionsBuilder.UseLoggerFactory(loggerFactory);

            base.OnConfiguring(optionsBuilder);
        }

原文地址:https://www.cnblogs.com/IWings/p/12436298.html

时间: 2024-11-05 13:26:59

EF Code 如何输出sql语句的相关文章

DbCommandInterceptor抓取EF执行时的SQL语句

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

NHibernate输出SQL语句

用了NHierbate之后,很少需要写原生的SQL语句,由于总是看不到SQL语句,所以有时候对SQL调优非常不利.因此产生了让NHibernate输出它所生成的SQL语句的想法,以便于后续调优. 一.在控制台输出SQL语句 在控制台程序中,要查看NHibernate所生成的SQL语句,方法非常简单,只需要改下配置文件就OK了. <property name="show_sql">true</property> <property name="fo

在plsql中输出SQL语句

如何在plsql中快速输出一行语句甚至是一个sql脚本,比如你在页面输入se  然后快速得到select  *  from (1)在plsql中,鼠标单击上面的[工具]选项,在下拉框中选择[首选项] (2)然后进入到首选项的对话框里面,在左边的[用户界面]下单击[编辑器]选项,如图就会在右侧出现可编辑的对话框,然后把滚动条往下拉,就能看到[自动替换]的选项卡 (4)在[自动替换]里,点击[编辑]后,会弹出一个[自动替换定义]可编辑的选项框,在里面填写你要设置的sql,例如: se = selec

Asp.Net MVC EF之一:使用Database类在EF框架中执行Sql语句

h4 { padding: 8px 5px; background-color: #32c5d2 } .start-box,.body { padding: 10px } .tit { font-size: 14px; font-weight: bold } div.content { line-height: 150%; font-weight: bold } .content { border: dashed 1px #999999; padding: 10px; background: #

EF Core中执行Sql语句查询操作之FromSql,ExecuteSqlCommand,SqlQuery

一.目前EF Core的版本为V2.1 相比较EF Core v1.0 目前已经增加了不少功能. EF Core除了常用的增删改模型操作,Sql语句在不少项目中是不能避免的. 在EF Core中上下文,可以返货DbConnection ,执行sql语句.这是最底层的操作方式,代码写起来还是挺多的. 初次之外 EF Core中还支持 FromSql,ExecuteSqlCommand 连个方法,用于更方便的执行Sql语句. 另外,目前版本的EF Core 不支持SqlQuery,但是我们可以自己扩

使用Hibernate 拦截执行sql语句,并输出sql语句,获取sql语句

重建包名 org.hibernate.type.descriptor.sql 重建类BasicBinder 代码如下 package org.hibernate.type.descriptor.sql; import java.sql.PreparedStatement; import java.sql.SQLException; import org.hibernate.internal.CoreLogging; import org.hibernate.type.descriptor.Jdb

在EF中直接执行SQL语句

最近考虑到并发的问题,用 EF 处理并发非常麻烦, 直接用原生SQL简单: Database.ExecuteSqlCommand:不用返回结果,比如Update等等, Database.SqlQuery<T>:返回结果,比如查询 例: db.Database.ExecuteSqlCommand("update tbMemberAccount set Sum_Recharge=Sum_Recharge+{0},Left_ECurrency=Left_ECurrency+{0},Upda

phpcms V9 改造:输出sql语句

1.修改数据库驱动phpcms/libs/classes/mysql.class.php 添加以下代码:/*** 最近一次查询语句*/private $lastquerysql = '';public function lastsql() {        return $this->lastquerysql;} 修改execute方法,在$this->lastqueryid = mysql_query($sql, $this->link) or $this->halt(mysql

Entity Framework Code First执行SQL语句、视图及存储过程

1.Entity Framework Code First查询表或视图 var provincelist = ctx.Provinces.SqlQuery("SELECT TOP 10 * FROM Province"); foreach (var province in provincelist) { Console.WriteLine("{0}-{1}-{2}", province.ProvinceID, province.ProvinceNo, provinc