You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:58:37