查看生成的SQL

方式一  AOP


4.5.2.4版本才支持  

db.Aop.OnLogExecuted = (sql, pars) => //SQL执行完事件
{

};
db.Aop.OnLogExecuting = (sql, pars) => //SQL执行前事件
{

};
db.Aop.OnError = (exp) =>//执行SQL 错误事件
{
   //exp.sql exp.parameters 可以拿到参数和错误Sql             
};
db.Aop.OnExecutingChangeSql = (sql, pars) => //SQL执行前 可以修改SQL
{
    return new KeyValuePair<string, SugarParameter[]>(sql,pars);
};


新版本获取执行时间

Db.Ado.SqlExecutionTime



低版本 可以通过TempItems这个变量来算出这个SQL执行时间       

db.Aop.OnLogExecuting =(sql,pars)=>{
    if (db.TempItems == null) db.TempItems = new Dictionary<string, object>();
    db.TempItems.Add("logTime",DateTime.Now);
}
db.Aop.OnLogExecuted (sql,pars){
   var startingTime= db.TempItems["logTime"];
   db.TempItems.Remove("logtime");
   var completedTime=DateTime.Now;
}


低版本写法

db.Ado.IsEnableLogEvent = true;
db.Ado.LogEventStarting = (sql, pars) =>
{
 Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
 Console.WriteLine();
};




方式二  ToSql

var sql = db.Queryable<T>().ToSql()


差异日志功能 4.9

该功能是对上面 AOP事件的升级


可以方便拿到 数据库操作前和操作后的数据变化。

   db.Aop.OnDiffLogEvent = it =>
            {
                var editBeforeData = it.BeforeData;
                var editAfterData = it.AfterData;
                var sql = it.Sql;
                var parameter = it.Parameters;
                var data = it.BusinessData;
                var time = it.Time;
                var  diffType=it.DiffType;//枚举值 insert 、update 和 delete 用来作业务区分
                
                //你可以在这里面写日志方法
            };


            var id = db.Insertable(new Student() { Name = "beforeName" })
            .EnableDiffLogEvent(new {  title="add student"})
            .ExecuteReturnIdentity();


            db.Updateable<Student>(new Student()
            {
                Id = id,
                CreateTime = DateTime.Now,
                Name = "afterName",
                SchoolId = 2
            })
            .EnableDiffLogEvent(new { title = "update Student", Modular = 1, Operator = "admin" })
            .ExecuteCommand();


            db.Deleteable<Student>(id)
            .EnableDiffLogEvent(new { title = "delete student" })
            .ExecuteCommand();
















-

















收藏到朋友圈: