public NorthwindResultSet SubmitChanges(ClientInfo clientInfo, NorthwindChangeSet changeSet) { var resultSet = new NorthwindResultSet(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.Categories, changeSet, changeSet.Categories, clientInfo); ApplyChanges(dataRepository, dataRepository.DemographicGroups, changeSet, changeSet.DemographicGroups, clientInfo); ApplyChanges(dataRepository, dataRepository.Customers, changeSet, changeSet.Customers, clientInfo); ApplyChanges(dataRepository, dataRepository.DynamicContentEntities, changeSet, changeSet.DynamicContentEntities, clientInfo); ApplyChanges(dataRepository, dataRepository.Employees, changeSet, changeSet.Employees, clientInfo); ApplyChanges(dataRepository, dataRepository.Order_Details, changeSet, changeSet.Order_Details, clientInfo); ApplyChanges(dataRepository, dataRepository.Orders, changeSet, changeSet.Orders, clientInfo); ApplyChanges(dataRepository, dataRepository.Products, changeSet, changeSet.Products, clientInfo); ApplyChanges(dataRepository, dataRepository.Regions, changeSet, changeSet.Regions, clientInfo); ApplyChanges(dataRepository, dataRepository.Shippers, changeSet, changeSet.Shippers, clientInfo); ApplyChanges(dataRepository, dataRepository.Suppliers, changeSet, changeSet.Suppliers, clientInfo); ApplyChanges(dataRepository, dataRepository.Territories, changeSet, changeSet.Territories, 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 NorthwindChangeSet CreateChangeSet(IEnumerable <Category> categories, IEnumerable <DemographicGroup> demographicGroups, IEnumerable <Customer> customers, IEnumerable <DynamicContentEntity> dynamicContentEntities, IEnumerable <Employee> employees, IEnumerable <Order_Detail> order_Details, IEnumerable <Order> orders, IEnumerable <Product> products, IEnumerable <Region> regions, IEnumerable <Shipper> shippers, IEnumerable <Supplier> suppliers, IEnumerable <Territory> territories) { // retrieve changes sets (modified entities) var categoryChangeSet = GetChangeSet(categories); var demographicGroupChangeSet = GetChangeSet(demographicGroups); var customerChangeSet = GetChangeSet(customers); var dynamicContentEntityChangeSet = GetChangeSet(dynamicContentEntities); var employeeChangeSet = GetChangeSet(employees); var order_DetailChangeSet = GetChangeSet(order_Details); var orderChangeSet = GetChangeSet(orders); var productChangeSet = GetChangeSet(products); var regionChangeSet = GetChangeSet(regions); var shipperChangeSet = GetChangeSet(shippers); var supplierChangeSet = GetChangeSet(suppliers); var territoryChangeSet = GetChangeSet(territories); // reduce entities (copy changed values) var categoriesMap = ReduceToModifications(categoryChangeSet); var demographicGroupsMap = ReduceToModifications(demographicGroupChangeSet); var customersMap = ReduceToModifications(customerChangeSet); var dynamicContentEntitiesMap = ReduceToModifications(dynamicContentEntityChangeSet); var employeesMap = ReduceToModifications(employeeChangeSet); var order_DetailsMap = ReduceToModifications(order_DetailChangeSet); var ordersMap = ReduceToModifications(orderChangeSet); var productsMap = ReduceToModifications(productChangeSet); var regionsMap = ReduceToModifications(regionChangeSet); var shippersMap = ReduceToModifications(shipperChangeSet); var suppliersMap = ReduceToModifications(supplierChangeSet); var territoriesMap = ReduceToModifications(territoryChangeSet); // fixup relations (replaces related entities with reduced entites) FixupRelations( CastToEntityTuple(categoriesMap), CastToEntityTuple(demographicGroupsMap), CastToEntityTuple(customersMap), CastToEntityTuple(dynamicContentEntitiesMap), CastToEntityTuple(employeesMap), CastToEntityTuple(order_DetailsMap), CastToEntityTuple(ordersMap), CastToEntityTuple(productsMap), CastToEntityTuple(regionsMap), CastToEntityTuple(shippersMap), CastToEntityTuple(suppliersMap), CastToEntityTuple(territoriesMap) ); var changeSet = new NorthwindChangeSet(); if (categoriesMap.Count > 0) { changeSet.Categories = categoriesMap.Select(e => e.ReducedEntity).ToList(); } if (demographicGroupsMap.Count > 0) { changeSet.DemographicGroups = demographicGroupsMap.Select(e => e.ReducedEntity).ToList(); } if (customersMap.Count > 0) { changeSet.Customers = customersMap.Select(e => e.ReducedEntity).ToList(); } if (dynamicContentEntitiesMap.Count > 0) { changeSet.DynamicContentEntities = dynamicContentEntitiesMap.Select(e => e.ReducedEntity).ToList(); } if (employeesMap.Count > 0) { changeSet.Employees = employeesMap.Select(e => e.ReducedEntity).ToList(); } if (order_DetailsMap.Count > 0) { changeSet.Order_Details = order_DetailsMap.Select(e => e.ReducedEntity).ToList(); } if (ordersMap.Count > 0) { changeSet.Orders = ordersMap.Select(e => e.ReducedEntity).ToList(); } if (productsMap.Count > 0) { changeSet.Products = productsMap.Select(e => e.ReducedEntity).ToList(); } if (regionsMap.Count > 0) { changeSet.Regions = regionsMap.Select(e => e.ReducedEntity).ToList(); } if (shippersMap.Count > 0) { changeSet.Shippers = shippersMap.Select(e => e.ReducedEntity).ToList(); } if (suppliersMap.Count > 0) { changeSet.Suppliers = suppliersMap.Select(e => e.ReducedEntity).ToList(); } if (territoriesMap.Count > 0) { changeSet.Territories = territoriesMap.Select(e => e.ReducedEntity).ToList(); } return(changeSet); }
partial void BeforeSaving(ClientInfo clientInfo, ref NorthwindChangeSet changeSet, INorthwindRepository repository);
partial void PreProcessing(ClientInfo clientInfo, ref NorthwindChangeSet changeSet, INorthwindRepository repository);