方式一 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()
该功能是对上面 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();-
2016 © donet5.comApache Licence 2.0