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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM