mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 增加 Aop.AuditDataReader 事件拦截 DataReader 读取值 #436;
This commit is contained in:
		@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user