示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 partial void BeforeSaving(ClientInfo clientInfo, ref ConcurrencyTestChangeSet changeSet, IConcurrencyTestRepository repository);
示例#4
0
 partial void PreProcessing(ClientInfo clientInfo, ref ConcurrencyTestChangeSet changeSet, IConcurrencyTestRepository repository);