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);
        }