需要提前引入微软日志包:
PM>Install-Package Microsoft.Extensions.Logging
使用时只需要在配置DbContextOptionsBuilder时进行配置即可:
ServiceCollection serviceContainer = new ServiceCollection(); serviceContainer.AddDbContext(options => { string defaultConnStr = "****"; // 连接字符串 options.UseSqlServer(defaultConnStr); // 配置标准日志,执行EFCore时会在控制台打印对应的SQL语句 ILoggerFactory myLoggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); options.UseLoggerFactory(myLoggerFactory); });
LogTo在 DBContext 的 OnConfiguring 方法中,也可以对 DbContextOptionsBuilder 进行配置
由微软提供的DbContextOptionsBuilder类的实例方法LogTo,最简单的用法:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.LogTo(Console.WriteLine);
}
LogTo接收一个Action
ToQueryString通过LogTo,获取的不仅仅是生成的SQL语句,它包含EF内部工作的整个过程,可以自己处理输出内容
标准日志和 LogTo的方式都是是监听整个DbCotext,如果在一个请求上下文有多个操作时会生成有很多的SQL语句,找起来也是很麻烦的。
ToQueryString可以针对单个操作获取 SQL 语句(仅限查询操作,因为ToQueryString是IQueryable的扩展方法)。
PS:只能获取查询操作,即返回值是IQueryable类型的操作
另外,ToQueryString获取的SQL是不需要真的执行查询的
IQueryableSQL Server ProfilerbookQuery = _dbContext.Books.Where(d => d.Title.Contains("C#")); Console.WriteLine(bookQuery.ToQueryString());
属于SQL Server工具,可以跟踪在数据库中执行的所有的SQL。
如果有很多人在操作数据库,你可能来不及找你自己执行的操作。当然 SQL Server Profiler 也提供筛选设置(个人感觉不好用)



