如何将MSDN示例代码加入EF Core的ProjectContext并查看带SQL的实体输出
查看EF生成的SQL语句:整合日志代码到你的ProjectContext
嘿,要解决看不到EF生成的SQL这个问题,我们可以把日志功能加到你的ProjectContext里。结合你提到的文档内容,这里给你两种适配方案,对应不同的EF版本:
方案1:适配EF6(对应你提到的文档内容)
如果你的项目用的是EF6,直接在ProjectContext的构造函数里添加日志配置就行,修改后的代码如下:
using Proj_s.Models; using System.Data.Entity; // 注意:EF6使用这个命名空间,替换你当前的EF Core引用 using System.Diagnostics; namespace mostlycode { public class ProjectContext : DbContext { public ProjectContext(DbContextOptions<ProjectContext> options) : base(options) { // 把EF生成的SQL输出到Visual Studio调试窗口 Database.Log = s => Debug.WriteLine(s); } public DbSet<Project> Projects { get; set; } public DbSet<Worker> Workers{ get; set; } // public DbSet<ProjAssignment> ProjAssignments{ get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Project>().ToTable("Project"); modelBuilder.Entity<Worker>().ToTable("Worker"); // modelBuilder.Entity<ProjAssignment>().ToTable("ProjAssignment"); } } }
关键步骤:
- 新增
using System.Diagnostics;命名空间,用来调用Debug.WriteLine输出日志 - 在构造函数里设置
Database.Log属性,把EF生成的所有数据库操作日志(包括完整SQL)发送到调试输出窗口
方案2:适配EF Core(你的代码当前使用的版本)
从你的代码引用Microsoft.EntityFrameworkCore来看,你实际用的是EF Core,这时候EF6的日志API不适用,我们需要用EF Core的原生日志配置方式,修改OnConfiguring方法即可:
using Proj_s.Models; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; namespace mostlycode { public class ProjectContext : DbContext { public ProjectContext(DbContextOptions<ProjectContext> options) : base(options) { } public DbSet<Project> Projects { get; set; } public DbSet<Worker> Workers{ get; set; } // public DbSet<ProjAssignment> ProjAssignments{ get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 配置日志,将SQL输出到调试窗口 optionsBuilder.UseLoggerFactory(LoggerFactory.Create(builder => { builder.AddDebug(); builder.SetMinimumLevel(LogLevel.Information); })); base.OnConfiguring(optionsBuilder); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Project>().ToTable("Project"); modelBuilder.Entity<Worker>().ToTable("Worker"); // modelBuilder.Entity<ProjAssignment>().ToTable("ProjAssignment"); } } }
说明:
- 需要新增
using Microsoft.Extensions.Logging;命名空间 - 通过
UseLoggerFactory配置日志工厂,添加调试输出提供者,设置日志级别为Information就能看到生成的完整SQL - 配置完成后,运行项目并触发数据库操作(比如查询、新增数据),就能在Visual Studio的输出窗口(调试模式下)看到EF生成的SQL语句了
内容的提问来源于stack exchange,提问作者streamc
相关产品推荐
相关产品推荐

