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