- 增加 Aop.AuditDataReader 事件拦截 DataReader 读取值 #436;

This commit is contained in:
28810
2020-08-25 12:42:58 +08:00
parent 824d60cbb2
commit fbf62b6630
10 changed files with 136 additions and 26 deletions

View File

@ -309,7 +309,7 @@ namespace FreeSql.Internal
return Utils.GetDataReaderValue(parent.Property.PropertyType, null);
return Utils.GetDataReaderValue(parent.CsType, null);
}
object objval = dr.GetValue(++index);
object objval = Utils.InternalDataReaderGetValue(_common, dr, ++index); // dr.GetValue(++index);
if (dbValue != null) dbValue.DbValue = objval == DBNull.Value ? null : objval;
if (parent.CsType != parent.MapType)
objval = Utils.GetDataReaderValue(parent.MapType, objval);

View File

@ -18,6 +18,7 @@ namespace FreeSql.Internal.CommonProvider
public event EventHandler<Aop.SyncStructureAfterEventArgs> SyncStructureAfter;
public event EventHandler<Aop.AuditValueEventArgs> AuditValue;
public event EventHandler<Aop.AuditDataReaderEventArgs> AuditDataReader;
public event EventHandler<Aop.CommandBeforeEventArgs> CommandBefore;
public event EventHandler<Aop.CommandAfterEventArgs> CommandAfter;
@ -36,6 +37,7 @@ namespace FreeSql.Internal.CommonProvider
public EventHandler<Aop.SyncStructureAfterEventArgs> SyncStructureAfterHandler => SyncStructureAfter;
public EventHandler<Aop.AuditValueEventArgs> AuditValueHandler => AuditValue;
public EventHandler<Aop.AuditDataReaderEventArgs> AuditDataReaderHandler => AuditDataReader;
public EventHandler<Aop.CommandBeforeEventArgs> CommandBeforeHandler => CommandBefore;
public EventHandler<Aop.CommandAfterEventArgs> CommandAfterHandler => CommandAfter;

View File

@ -81,7 +81,7 @@ namespace FreeSql.Internal.CommonProvider
object val = col.GetValue(d);
var auditArgs = new Aop.AuditValueEventArgs(Aop.AuditValueType.InsertOrUpdate, col, table.Properties[col.CsName], val);
orm.Aop.AuditValueHandler(sender, auditArgs);
if (auditArgs.IsChanged)
if (auditArgs.ValueIsChanged)
{
col.SetValue(d, val = auditArgs.Value);
if (changedDict != null && changedDict.ContainsKey(col.Attribute.Name) == false)
@ -101,7 +101,7 @@ namespace FreeSql.Internal.CommonProvider
object val = col.GetValue(data);
var auditArgs = new Aop.AuditValueEventArgs(Aop.AuditValueType.InsertOrUpdate, col, table.Properties[col.CsName], val);
orm.Aop.AuditValueHandler(sender, auditArgs);
if (auditArgs.IsChanged)
if (auditArgs.ValueIsChanged)
{
col.SetValue(data, val = auditArgs.Value);
if (changedDict != null && changedDict.ContainsKey(col.Attribute.Name) == false)

View File

@ -152,7 +152,7 @@ namespace FreeSql.Internal.CommonProvider
{
var auditArgs = new Aop.AuditValueEventArgs(Aop.AuditValueType.Insert, col, table.Properties[col.CsName], val);
orm.Aop.AuditValueHandler(sender, auditArgs);
if (auditArgs.IsChanged)
if (auditArgs.ValueIsChanged)
{
col.SetValue(data, val = auditArgs.Value);
if (changedDict != null && changedDict.ContainsKey(col.Attribute.Name) == false)

View File

@ -353,7 +353,7 @@ namespace FreeSql.Internal.CommonProvider
object val = col.GetValue(d);
var auditArgs = new Aop.AuditValueEventArgs(Aop.AuditValueType.Update, col, table.Properties[col.CsName], val);
orm.Aop.AuditValueHandler(sender, auditArgs);
if (auditArgs.IsChanged)
if (auditArgs.ValueIsChanged)
{
col.SetValue(d, val = auditArgs.Value);
if (changedDict != null && changedDict.ContainsKey(col.Attribute.Name) == false)
@ -373,7 +373,7 @@ namespace FreeSql.Internal.CommonProvider
object val = col.GetValue(data);
var auditArgs = new Aop.AuditValueEventArgs(Aop.AuditValueType.Update, col, table.Properties[col.CsName], val);
orm.Aop.AuditValueHandler(sender, auditArgs);
if (auditArgs.IsChanged)
if (auditArgs.ValueIsChanged)
{
col.SetValue(data, val = auditArgs.Value);
if (changedDict != null && changedDict.ContainsKey(col.Attribute.Name) == false)

View File

@ -1324,7 +1324,14 @@ namespace FreeSql.Internal
internal static PropertyInfo PropertyDataReaderFieldCount = typeof(DbDataReader).GetProperty("FieldCount");
internal static object InternalDataReaderGetValue(CommonUtils commonUtil, DbDataReader dr, int index)
{
if (commonUtil._orm.Ado.DataType == DataType.Dameng && dr.IsDBNull(index)) return null;
var orm = commonUtil._orm;
if (orm.Aop.AuditDataReaderHandler != null)
{
var args = new Aop.AuditDataReaderEventArgs(dr, index);
orm.Aop.AuditDataReaderHandler(orm, args);
return args.Value;
}
if (orm.Ado.DataType == DataType.Dameng && dr.IsDBNull(index)) return null; //OdbcDameng 不会报错
return dr.GetValue(index);
}
internal static RowInfo ExecuteArrayRowReadClassOrTuple(string flagStr, Type typeOrg, int[] indexes, DbDataReader row, int dataIndex, CommonUtils _commonUtils)
@ -1447,7 +1454,7 @@ namespace FreeSql.Internal
var name = row2.GetName(a);
//expando[name] = row2.GetValue(a);
if (expandodic.ContainsKey(name)) continue;
expandodic.Add(name, row2.GetValue(a));
expandodic.Add(name, Utils.InternalDataReaderGetValue(_commonUtils, row2, a));
}
//expando = expandodic;
return new RowInfo(expandodic, fc);