咨询区
PC.:
我正在 MVC5 项目中使用 EF 6.0
,为了方便调试和获取性能指标,我想记录 EF6 中的所有 sql 日志。
在 Java/Hibernate
中,我只需要设置 hibernate.show_sql=true
就可以了,不知道在 EF 中该如何设置等价操作呢 ?
回答区
Andrew:
EF 中有一个可接收 string 参数的委托方法 DbContext.Database.Log
,一般来说,只需要将实现 TextWriter 或其子类的 Write 方法赋上去就可以了,这样EF所有的日志都会被送到该 Write 中,比如下面的代码就是将日志输送到 Console 上。
using (var context = new BlogContext())
{context.Database.Log = Console.Write;// Your code here...
}
Ogglas:
EF Core 的日志记录已经和 .NET Core
的日志引擎整合了,下面的例子展示了如何将日志输出到 Console 上。
public class SchoolContext : DbContext
{//static LoggerFactory objectpublic static readonly ILoggerFactory loggerFactory = new LoggerFactory(new[] {new ConsoleLoggerProvider((_, __) => true, true)});//or// public static readonly ILoggerFactory loggerFactory = new LoggerFactory().AddConsole((_,___) => true);public SchoolContext():base(){}protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseLoggerFactory(loggerFactory) //tie-up DbContext with LoggerFactory object.EnableSensitiveDataLogging() .UseSqlServer(@"Server=.\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;");}public DbSet<Student> Students { get; set; }
}
点评区
小编貌似已经多年不再使用 EF 了,不是因为不好,而是因为太好了,让我都忘记了如何写 SQL 了 ????????????,可抬头跳到 C# 之外,会 Linq 能不能跨领域我不知道,会 SQL 那绝对可以跨领域 ,比如:ES,Spark,Kudu,Tidb .... 对了,就连 Redis,MongoDB 都有支持 SQL 的扩展插件 .... 醉了????。