public DataResult Update(DynamicRow row) { #region check if (!row.__DatabaseFirst) { throw new Exception( LogRecord .Create() .SetMessage( "DynamicRow instance ", "in 'CodeFirst' mode ", "can't invoke Update() method." ) .Error() .Message ); } if (row.__DynamicTableNames.IsNullOrEmpty()) { throw new Exception( LogRecord .Create() .SetMessage( "DynamicRow instance ", "can't invoke Update() method ", "without settings table name." ) .Error() .Message ); } if (row.__DynamicTableNames.Count() > 1) { throw new Exception( LogRecord .Create() .SetMessage( "You can't invoke Update() method ", "for multiple tables ", "in DynamicRow instance." ) .Error() .Message ); } #endregion return(base.Update( row.__DynamicTableNames[0], row.__DynamicDirtyValues, row.__DynamicBasePrimaryKeys )); }
public static List <dynamic>[] ToDynamics( this DbDataReader reader, int pageSize, int pageIndex) { var all = new List <List <dynamic> >(); if (null == reader || !reader.HasRows) { return(all.ToArray()); } bool paging = pageSize > 0 && pageIndex > 0; do { var list = new List <dynamic>(); int index = 0; var columns = reader.GetColumns(); while (reader.Read()) { index++; if (paging) { if ((pageIndex - 1) * pageSize > index) { continue; } if (pageIndex * pageSize > index) { break; } } DynamicRow row = new DynamicRow(); reader.CurrentBindDynamicRow(columns, ref row); list.Add(row as dynamic); } all.Add(list); }while(reader.NextResult()); return(all.ToArray()); }
public static void CurrentBindDynamicRow( this DbDataReader reader, List <DynamicColumn> columns, ref DynamicRow row) { if (null == reader) { return; } if (columns.IsNullOrEmpty()) { return; } var dbValues = new object[columns.Count]; reader.GetValues(dbValues); var flatValues = new List <Any>(); var values = new List <Any>(); var hashCodes = new List <Any>(); var dbNulls = new List <string>(); var columnIndex = -1; foreach (var column in columns) { columnIndex++; var value = dbValues[columnIndex]; if (DBNull.Value == value) { dbNulls.Add(column.BaseColumnName); value = null; } flatValues.SafeAdd(column.ColumnName, value); flatValues.SafeAdd(column.BaseColumnName, value); values.Add(column.BaseColumnName, value); if (null != value) { int hashCode = value.GetHashCode(); hashCodes.Add( column.BaseColumnName, hashCode ); } } row.__ReturnAny = true; row.__DatabaseFirst = true; row.__DynamicColumns = columns; row.__FlatValues = flatValues; row.__DynamicValues = values; row.__DynamicOriginalValues = values; row.__OriginalHashCodes = hashCodes; row.__DynamicDbNulls = dbNulls; row.__OriginalHashCode = row.GetHashCode(); if (dbNulls.Any()) { foreach (var dbNull in dbNulls) { hashCodes.Add( dbNull, row.__OriginalHashCode ); } } row.__OriginalHashCodes = hashCodes; }
public static List <dynamic> ToDynamics( this DbDataReader reader, int pageSize, int pageIndex) { var list = new List <dynamic>(); if (null == reader) { return(list); } bool paging = pageSize > 0 && pageIndex > 0; int index = 0; var schema = reader.GetSchemaTable(); var tableName = schema.TableName; var columns = new List <string>(); for (int i = 0; i < reader.FieldCount; i++) { string s = reader.GetName(i); columns.Add(s); } var dbValues = new object[reader.FieldCount]; while (reader.Read()) { index++; if (paging) { if ((pageIndex - 1) * pageSize > index) { continue; } if (pageIndex * pageSize > index) { break; } } reader.GetValues(dbValues); //var row = schema.NewRow(); var values = new List <Any>(); var hashCodes = new List <Any>(); var dbNulls = new List <string>(); var columnIndex = -1; foreach (var column in columns) { columnIndex++; var value = dbValues[columnIndex]; if (DBNull.Value == value) { dbNulls.Add(column); value = null; } values.Add(column, value); if (null != value) { int hashCode = value.GetHashCode(); hashCodes.Add(column, hashCode); } } var data = new DynamicRow() { __ReturnAny = true, __DatabaseFirst = true, __TableName = tableName, __Values = values, __HashCodes = hashCodes, __DbNulls = dbNulls, }; data.__OriginalHashCode = data.GetHashCode(); if (dbNulls.Any()) { foreach (var dbNull in dbNulls) { hashCodes.Add( dbNull, data.__OriginalHashCode ); } } data.__HashCodes = hashCodes; list.Add(data as dynamic); } return(list); }