public BaseFault UploadContract(IEnumerable<API.Interface.DataContracts.Contract> contracts) { Logger.Log.Debug("Старт обновления контрактов."); if (!Common.Settings.Instance.CurrentBudgetVersionId.HasValue) { Logger.Log.Error(string.Format("Не найдена версия текущего бюджета (Год:{0}).", DateTime.Now.Year)); return new ContractUploadFault(); } Guid budgetVersionId = Common.Settings.Instance.CurrentBudgetVersionId.Value; using (var scope = new TransactionScope(TransactionScopeOption.Suppress)) { using (var context = CreateContext()) { var caList = (from ca in context.Contracts where ca.BudgetVersionId == budgetVersionId select ca).ToList(); var currencyList = (from cur in context.Currencies select cur).ToList(); foreach (var contract in contracts) { try { Logger.Log.DebugFormat("Обновляем контракт №{0} {1} (Id={2}).", contract.Prefix, contract.Number, contract.Id); var parentContractId = CreateContract(context, budgetVersionId, contract, caList, currencyList, null); if (parentContractId == null) continue; if (contract.Subcontracts != null) UploadSubcontracts(context, budgetVersionId, contract, caList, currencyList, parentContractId.Value); if (contract.PaymentPlan != null) UploadPaymentPlan(context, budgetVersionId, contract, parentContractId.Value, contract.PaymentPlan.Where(ppi => ppi.DogId == contract.Id)); } catch (Exception ex) { Logger.Log.Error(string.Format("Ошибка обновления контракта №{0} {1} (Id={2}).", contract.Prefix, contract.Number, contract.Id), ex); ContractUploadFault fail = new ContractUploadFault(); fail.ErrorCode = 301; fail.Description = ex.Message; return fail; } } try { Logger.Log.Debug("Сохраняем информацию о контрактах."); context.SubmitChanges(); Logger.Log.Debug("Сохранение контрактов прошло успешно."); } catch (Exception ex) { Logger.Log.Error("Ошибка сохранения в БД.", ex); ContractUploadFault fail = new ContractUploadFault(); fail.ErrorCode = 301; fail.Description = ex.Message; return fail; } } scope.Complete(); } Logger.Log.Debug("Завершение обновления контрактов."); return null; }
public BaseFault UploadContract(IEnumerable <API.Interface.DataContracts.Contract> contracts) { Logger.Log.Debug("Старт обновления контрактов."); if (!Common.Settings.Instance.CurrentBudgetVersionId.HasValue) { Logger.Log.Error(string.Format("Не найдена версия текущего бюджета (Год:{0}).", DateTime.Now.Year)); return(new ContractUploadFault()); } Guid budgetVersionId = Common.Settings.Instance.CurrentBudgetVersionId.Value; using (var scope = new TransactionScope(TransactionScopeOption.Suppress)) { using (var context = CreateContext()) { var caList = (from ca in context.Contracts where ca.BudgetVersionId == budgetVersionId select ca).ToList(); var currencyList = (from cur in context.Currencies select cur).ToList(); foreach (var contract in contracts) { try { Logger.Log.DebugFormat("Обновляем контракт №{0} {1} (Id={2}).", contract.Prefix, contract.Number, contract.Id); var parentContractId = CreateContract(context, budgetVersionId, contract, caList, currencyList, null); if (parentContractId == null) { continue; } if (contract.Subcontracts != null) { UploadSubcontracts(context, budgetVersionId, contract, caList, currencyList, parentContractId.Value); } if (contract.PaymentPlan != null) { UploadPaymentPlan(context, budgetVersionId, contract, parentContractId.Value, contract.PaymentPlan.Where(ppi => ppi.DogId == contract.Id)); } } catch (Exception ex) { Logger.Log.Error(string.Format("Ошибка обновления контракта №{0} {1} (Id={2}).", contract.Prefix, contract.Number, contract.Id), ex); ContractUploadFault fail = new ContractUploadFault(); fail.ErrorCode = 301; fail.Description = ex.Message; return(fail); } } try { Logger.Log.Debug("Сохраняем информацию о контрактах."); context.SubmitChanges(); Logger.Log.Debug("Сохранение контрактов прошло успешно."); } catch (Exception ex) { Logger.Log.Error("Ошибка сохранения в БД.", ex); ContractUploadFault fail = new ContractUploadFault(); fail.ErrorCode = 301; fail.Description = ex.Message; return(fail); } } scope.Complete(); } Logger.Log.Debug("Завершение обновления контрактов."); return(null); }