public ConcurrencyTestResultSet SubmitChanges(ClientInfo clientInfo, ConcurrencyTestChangeSet changeSet) { var resultSet = new ConcurrencyTestResultSet(changeSet); using (var transactionScope = CreateSavingTransactionScope()) { using (var dataRepository = _repositoryFactory(clientInfo)) { // optional custom processing PreProcessing(clientInfo, ref changeSet, dataRepository); // apply chnages to repository ApplyChanges(dataRepository, dataRepository.ARecords, changeSet, changeSet.ARecords, clientInfo); ApplyChanges(dataRepository, dataRepository.BRecords, changeSet, changeSet.BRecords, clientInfo); ApplyChanges(dataRepository, dataRepository.CRecords, changeSet, changeSet.CRecords, clientInfo); // optional custom processing BeforeSaving(clientInfo, ref changeSet, dataRepository); // save changes SaveChanges(dataRepository, changeSet, resultSet); // optional custom processing PostProcessing(clientInfo, ref resultSet, dataRepository); } transactionScope.Complete(); } return(resultSet); }
public ConcurrencyTestChangeSet CreateChangeSet(IEnumerable <ARecord> aRecords, IEnumerable <BRecord> bRecords, IEnumerable <CRecord> cRecords) { // retrieve changes sets (modified entities) var aRecordChangeSet = GetChangeSet(aRecords); var bRecordChangeSet = GetChangeSet(bRecords); var cRecordChangeSet = GetChangeSet(cRecords); // reduce entities (copy changed values) var aRecordsMap = ReduceToModifications(aRecordChangeSet); var bRecordsMap = ReduceToModifications(bRecordChangeSet); var cRecordsMap = ReduceToModifications(cRecordChangeSet); // fixup relations (replaces related entities with reduced entites) FixupRelations( CastToEntityTuple(aRecordsMap), CastToEntityTuple(bRecordsMap), CastToEntityTuple(cRecordsMap) ); var changeSet = new ConcurrencyTestChangeSet(); if (aRecordsMap.Count > 0) { changeSet.ARecords = aRecordsMap.Select(e => e.ReducedEntity).ToList(); } if (bRecordsMap.Count > 0) { changeSet.BRecords = bRecordsMap.Select(e => e.ReducedEntity).ToList(); } if (cRecordsMap.Count > 0) { changeSet.CRecords = cRecordsMap.Select(e => e.ReducedEntity).ToList(); } return(changeSet); }
partial void BeforeSaving(ClientInfo clientInfo, ref ConcurrencyTestChangeSet changeSet, IConcurrencyTestRepository repository);
partial void PreProcessing(ClientInfo clientInfo, ref ConcurrencyTestChangeSet changeSet, IConcurrencyTestRepository repository);