当您使用LINQ插入新记录时,如果您想要获取生成的SQL命令文本,可以使用以下方法:
DbContext.Database.Log
属性注册一个回调函数,该函数将在每次执行SQL命令时被调用。using (var context = new MyDbContext())
{
context.Database.Log = command =>
{
Console.WriteLine(command.CommandText);
};
// 在此处插入新记录
}
Microsoft.EntityFrameworkCore.Diagnostics
包中的DbCommandInterceptor
类,该类允许您拦截和记录SQL命令。using System.Diagnostics;
using Microsoft.EntityFrameworkCore.Diagnostics;
class SqlCommandLogger : DbCommandInterceptor
{
public override InterceptionResult<int> NonQueryExecuting(
DbCommand command,
CommandEventData eventData,
InterceptionResult<int> result)
{
Debug.WriteLine(command.CommandText);
return base.NonQueryExecuting(command, eventData, result);
}
}
// 在DbContext中注册拦截器
using (var context = new MyDbContext())
{
context.GetInfrastructure().GetService<IInterceptor>().Add(new SqlCommandLogger());
// 在此处插入新记录
}
这两种方法都可以帮助您获取生成的SQL命令文本,以便您可以检查和调试您的代码。
领取专属 10元无门槛券
手把手带您无忧上云