zoukankan      html  css  js  c++  java
  • EF / EF CORE 打印SQL

    EF CORE

    public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); });
    services.AddDbContext<WordsOnline.Customer.Dashboard.Entity.DataContext>(options =>
                {
                    options.UseMySql(configuration["ConnectionString"], mySqlOptionsAction: sqlOptions =>
                    {
                        sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name);
                    }).UseLoggerFactory(MyLoggerFactory);
                }, ServiceLifetime.Scoped);
    

    EF

    在 VS 调试的时候,如果我们项目中使用的是 EntityFramework,查看 SQL 执行代码就不像 ADO.NET 那样直观了,我们需要设置下,可以参考下:

    How can I log the generated SQL from DbContext.SaveChanges() in my Program?
    如何:显示生成的 SQL
    按照 MSDN 的设置,发现 DbContext 并没有 Log 属性,应该是 EntityFramework 版本问题,stackoverflow 中的“context.Database.Log = Console.WriteLine;”,是我们想要的答案,但是只能用于控制台应用程序,我们调试项目输出应该使用:Debug.WriteLine,但是这样又会抱如下错误:

    异常信息:无法用“System.Diagnostics.Debug.WriteLine(string)”创建委托,因为它具有 Conditional 特性。

    正确代码
    根据 Log 属性的类型 Action,我们将代码修改下就可以:

    Context.Database.Log = new Action<string>(q => System.Diagnostics.Debug.WriteLine(q));
    

    这样调试项目的时候,我们就可以在“输出窗口”,看到 EntityFramework 生成并执行的 SQL 代码了。

    经验

    !打印的是该语句后面的SQL,之前的不记录

    参考:

    田园里的蟋蟀:EntityFramework 如何查看执行的 SQL 代码? https://www.cnblogs.com/xishuai/p/entityframework_debug_sql.html

  • 相关阅读:
    LeetCode | Remove Duplicates from Sorted List
    LeetCode | Remove Duplicates from Sorted Array
    LeetCode | Merge Sorted Array
    opencv的配置、使用
    LeetCode | Merge Two Sorted Lists
    LeetCode | Minimum Depth of Binary Tree
    LeetCode | Same Tree
    LeetCode | Maximum Depth of Binary Tree
    LeetCode | Insertion Sort List
    python运算符优先级
  • 原文地址:https://www.cnblogs.com/tangge/p/15576250.html
Copyright © 2011-2022 走看看