一、为什么要使用代码使用SQL
Profiler是显示所有活动,如果一个服务器是多个人员使用,产生的Sql非常多,即使使用过滤也很麻烦
二、代码查看的方式
1.标准日志模式
(1)引入nuget包
Microsoft.Extensions.Logging.Console
(2)再添加 代码到DbContext
为了方便,不使用注入方式,直接使用静态方法
//作用是输出到控制台
private static ILoggerFactory loggerFactory = LoggerFactory.Create(b => b.AddConsole());
(3)然后在DBContext中使用
optionsBuilder.UseLoggerFactory(loggerFactory);
把loggerFactory 传到这就行了
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
optionsBuilder.UseSqlServer("server=localhost;uid=sa;pwd=123456;database=LTYHR;");
//在这里使用
optionsBuilder.UseLoggerFactory(loggerFactory);
}
运行后结果
2.简单日志LogTo
(1)第一种的日志需要引入Ilogger框架,第二种更加简单,可以直接使用,
只是用起来简单,输出的东西不简单,输出了ef的工作过程。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("server=localhost;uid=sa;pwd=123456;database=LTYHR;");
optionsBuilder.LogTo(msg =>
{
Console.WriteLine(msg);
});
}
}
(2)可以使用简单的条件查询,筛选信息Sql信息
optionsBuilder.LogTo(msg =>
{
if (!msg.Contains("CommandExecuting")) return;
Console.WriteLine(msg);
});
3.ToQueryString
1.LogTo会将所有使用到的 sql语句都打印出来,如果sql操作较多,还需要一个个去对应去查看具体哪一个,比较麻烦,而ToQuerystring可以直接打印某一个对应的具体的SQL语句
2.只能查看查询的sql语句
3.可以不真正的执行查询语句就能查看sql
var persons = db.TPersons.Where(p => p.Name == "LTY");
string sql = persons.ToQueryString();
Console.WriteLine(sql);
三、总结
写测试性代码使用简单日志,
正式需要提交sql给审核员需要使用标准日志
开发阶段想立即从繁杂的操作中直接查看,用ToQueryString