public bool Update(List <TTable> records) { if (records == null || records.Count == 0) { return(false); } Action <TTable, TTable> copyAction = ExpressionFunc.PrimaryKeyCopy <TTable>(); List <List <Parameter> > listParameters = new List <List <Parameter> >(); Tuple <TranslateResult, TranslateResult> resultFirst = null; Tuple <TranslateResult, TranslateResult> resultNext = null; for (int i = 0, count = records.Count; i < count; i++) { var record = records[i]; if (IsValidRecord(record) == false) { return(false); } copyAction(record, GetCacheRecord(record)); List <Parameter> parameters = new List <Parameter>(); if (i == 0) { resultFirst = PreUpdate(record, null, null); parameters.AddRange(resultFirst.Item1.Parameters); parameters.AddRange(resultFirst.Item2.Parameters); } else { resultNext = PreUpdate(record, resultFirst.Item1.Parameters, resultFirst.Item2.Parameters); parameters.AddRange(resultNext.Item1.Parameters); parameters.AddRange(resultNext.Item2.Parameters); } listParameters.Add(parameters); } _dbSet.BeginTransaction(); if (listParameters.Count == 1) { this._dbError = _excuteUpdate.Excute <TTable>(_sqlBuilder.Update(), listParameters[0], _dbSet.Transaction); } else { this._dbError = _excuteUpdate.ExcuteBatch <TTable>(_sqlBuilder.Update(), listParameters, _dbSet.Transaction); } if (this._dbError.Code == ErrorCode.Success) { records.ForEach(rec => copyAction(GetCacheRecord(rec), rec)); } else { _dbSet.Cancel(); } return(this._dbError.Code == ErrorCode.Success); }
public bool Delete(List <TTable> records) { if (records == null || records.Count == 0) { return(false); } Action <TTable, TTable> copyAction = ExpressionFunc.PrimaryKeyCopy <TTable>(); List <List <Parameter> > listParameters = new List <List <Parameter> >(); TranslateResult resultFirst = null; TranslateResult resultNext = null; for (int i = 0, count = records.Count; i < count; i++) { var record = records[i]; if (IsValidRecord(record) == false) { return(false); } copyAction(record, GetCacheRecord(record)); if (i == 0) { resultFirst = _translate.Translator(record, typeof(TTable), _fieldsUsable, ClauseType.SaveWhere); _sqlBuilder.SaveWhere(resultFirst.CommandText); listParameters.Add(resultFirst.Parameters); } else { resultNext = _translate.Translator(record, typeof(TTable), _fieldsUsable, ClauseType.SaveWhere, resultFirst.Parameters); listParameters.Add(resultNext.Parameters); } } TableSchema tableSchema = TableSchemaResolver.GetTableSchema(typeof(TTable)); _sqlBuilder.From(tableSchema.PrimaryTable); _dbSet.BeginTransaction(); if (listParameters.Count == 1) { this._dbError = _excuteUpdate.Excute <TTable>(_sqlBuilder.Delete(), listParameters[0], _dbSet.Transaction); } else { this._dbError = _excuteUpdate.ExcuteBatch <TTable>(_sqlBuilder.Delete(), listParameters, _dbSet.Transaction); } if (this._dbError.Code == ErrorCode.Success) { records.ForEach(rec => DeleteRecordFromCache(rec)); } else { _dbSet.Cancel(); } return(this._dbError.Code == ErrorCode.Success); }