public TableInheritanceDemoDBResultSet SubmitChanges(ClientInfo clientInfo, TableInheritanceDemoDBChangeSet changeSet) { var resultSet = new TableInheritanceDemoDBResultSet(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.People, changeSet, changeSet.People, clientInfo); ApplyChanges(dataRepository, dataRepository.Addresses, changeSet, changeSet.Addresses, clientInfo); ApplyChanges(dataRepository, dataRepository.Demographics, changeSet, changeSet.Demographics, clientInfo); ApplyChanges(dataRepository, dataRepository.EmployeeRoles, changeSet, changeSet.EmployeeRoles, 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 TableInheritanceDemoDBChangeSet CreateChangeSet(IEnumerable <Person> people, IEnumerable <Address> addresses, IEnumerable <Demographic> demographics, IEnumerable <EmployeeRole> employeeRoles) { // retrieve changes sets (modified entities) var personChangeSet = GetChangeSet(people); var addressChangeSet = GetChangeSet(addresses); var demographicChangeSet = GetChangeSet(demographics); var employeeRoleChangeSet = GetChangeSet(employeeRoles); // reduce entities (copy changed values) var peopleMap = ReduceToModifications(personChangeSet); var addressesMap = ReduceToModifications(addressChangeSet); var demographicsMap = ReduceToModifications(demographicChangeSet); var employeeRolesMap = ReduceToModifications(employeeRoleChangeSet); // fixup relations (replaces related entities with reduced entites) FixupRelations( CastToEntityTuple(peopleMap), CastToEntityTuple(addressesMap), CastToEntityTuple(demographicsMap), CastToEntityTuple(employeeRolesMap) ); var changeSet = new TableInheritanceDemoDBChangeSet(); if (peopleMap.Count > 0) { changeSet.People = peopleMap.Select(e => e.ReducedEntity).ToList(); } if (addressesMap.Count > 0) { changeSet.Addresses = addressesMap.Select(e => e.ReducedEntity).ToList(); } if (demographicsMap.Count > 0) { changeSet.Demographics = demographicsMap.Select(e => e.ReducedEntity).ToList(); } if (employeeRolesMap.Count > 0) { changeSet.EmployeeRoles = employeeRolesMap.Select(e => e.ReducedEntity).ToList(); } return(changeSet); }
partial void BeforeSaving(ClientInfo clientInfo, ref TableInheritanceDemoDBChangeSet changeSet, ITableInheritanceDemoDBRepository repository);
partial void PreProcessing(ClientInfo clientInfo, ref TableInheritanceDemoDBChangeSet changeSet, ITableInheritanceDemoDBRepository repository);