Example #1
0
        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);
        }
Example #2
0
        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);
        }