Add deleteable.EnableDiffLogEvent

This commit is contained in:
sunkaixuan
2018-11-22 00:36:18 +08:00
parent fdef58e204
commit 4db7b38131
4 changed files with 83 additions and 14 deletions

View File

@@ -57,26 +57,19 @@ namespace OrmTest.Demo
};
var id = db.Queryable<Student>().First().Id;
var id = db.Insertable(new Student() { Name="beforeName" }).ExecuteReturnIdentity();
db.Updateable<Student>(new Student()
{
Id = id,
CreateTime = DateTime.Now,
Name = "before",
SchoolId = 1
})
.EnableDiffLogEvent(new { title = "update Student", Modular = 1, Operator = "admin" }).ExecuteCommand();
db.Updateable<Student>(new Student()
{
Id = id,
CreateTime = DateTime.Now,
Name = "after",
Name = "afterName",
SchoolId = 2
})
.EnableDiffLogEvent(new { title= "update Student", Modular=1, Operator="admin" })
.ExecuteCommand();
db.Deleteable<Student>(id).EnableDiffLogEvent(new { title = "delete student" }).ExecuteCommand();
}
}

View File

@@ -1,9 +1,11 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace SqlSugar
@@ -16,6 +18,8 @@ namespace SqlSugar
public DeleteBuilder DeleteBuilder { get; set; }
public MappingTableList OldMappingTableList { get; set; }
public bool IsAs { get; set; }
public bool IsEnableDiffLogEvent { get; set; }
public DiffLogModel diffModel { get; set; }
public EntityInfo EntityInfo
{
get
@@ -30,8 +34,12 @@ namespace SqlSugar
var paramters = DeleteBuilder.Parameters == null ? null : DeleteBuilder.Parameters.ToArray();
RestoreMapping();
AutoRemoveDataCache();
return Db.ExecuteCommand(sql, paramters);
Before(sql);
var result= Db.ExecuteCommand(sql, paramters);
After(sql);
return result;
}
public bool ExecuteCommandHasChange()
{
return ExecuteCommand() > 0;
@@ -71,6 +79,16 @@ namespace SqlSugar
return this; ;
}
public IDeleteable<T> EnableDiffLogEvent(object businessData = null)
{
diffModel = new DiffLogModel();
this.IsEnableDiffLogEvent = true;
diffModel.BusinessData = businessData;
diffModel.DiffType = DiffType.delete;
return this;
}
public IDeleteable<T> Where(List<T> deleteObjs)
{
if (deleteObjs == null || deleteObjs.Count() == 0)
@@ -329,5 +347,58 @@ namespace SqlSugar
asyncDeleteBuilder.TableWithString = this.DeleteBuilder.TableWithString;
return asyncDeleteable;
}
private void After(string sql)
{
if (this.IsEnableDiffLogEvent)
{
var parameters = DeleteBuilder.Parameters;
if (parameters == null)
parameters = new List<SugarParameter>();
diffModel.AfterDate = null;
diffModel.Time = this.Context.Ado.SqlExecutionTime;
this.Context.Ado.DiffLogEvent(diffModel);
}
}
private void Before(string sql)
{
if (this.IsEnableDiffLogEvent)
{
var parameters = DeleteBuilder.Parameters;
if (parameters == null)
parameters = new List<SugarParameter>();
diffModel.BeforeData = GetDiffTable(sql, parameters);
diffModel.Sql = sql;
diffModel.Parameters = parameters.ToArray();
}
}
private List<DiffLogTableInfo> GetDiffTable(string sql, List<SugarParameter> parameters)
{
List<DiffLogTableInfo> result = new List<DiffLogTableInfo>();
var whereSql = Regex.Replace(sql, ".* WHERE ", "", RegexOptions.Singleline);
var dt = this.Context.Queryable<T>().Where(whereSql).AddParameters(parameters).ToDataTable();
if (dt.Rows != null && dt.Rows.Count > 0)
{
foreach (DataRow row in dt.Rows)
{
DiffLogTableInfo item = new DiffLogTableInfo();
item.TableDescription = this.EntityInfo.TableDescription;
item.TableName = this.EntityInfo.DbTableName;
item.Columns = new List<DiffLogColumnInfo>();
foreach (DataColumn col in dt.Columns)
{
DiffLogColumnInfo addItem = new DiffLogColumnInfo();
addItem.Value = row[col.ColumnName];
addItem.ColumnName = col.ColumnName;
addItem.ColumnDescription = this.EntityInfo.Columns.First(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription;
item.Columns.Add(addItem);
}
result.Add(item);
}
}
return result;
}
}
}

View File

@@ -557,7 +557,9 @@ namespace SqlSugar
{
if (this.IsEnableDiffLogEvent)
{
var parameters = UpdateBuilder.Parameters.ToList();
var parameters = UpdateBuilder.Parameters;
if (parameters == null)
parameters = new List<SugarParameter>();
diffModel.AfterDate = GetDiffTable(sql, parameters);
diffModel.Time = this.Context.Ado.SqlExecutionTime;
this.Context.Ado.DiffLogEvent(diffModel);
@@ -569,6 +571,8 @@ namespace SqlSugar
if (this.IsEnableDiffLogEvent)
{
var parameters = UpdateBuilder.Parameters;
if (parameters == null)
parameters = new List<SugarParameter>();
diffModel.BeforeData = GetDiffTable(sql, parameters);
diffModel.Sql = sql;
diffModel.Parameters = parameters.ToArray();

View File

@@ -26,6 +26,7 @@ namespace SqlSugar
IDeleteable<T> Where(string whereString, SugarParameter parameter);
IDeleteable<T> Where(string whereString, SugarParameter[] parameters);
IDeleteable<T> Where(string whereString, List<SugarParameter> parameters);
IDeleteable<T> EnableDiffLogEvent(object businessData = null);
IDeleteable<T> RemoveDataCache();
KeyValuePair<string, List<SugarParameter>> ToSql();
}