MVC _ Сохранить / обновить запись в 2 таблицы одновременно - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь обновить / отредактировать 2 таблицы одновременно в MVC, код, указанный ниже:

ActivityDao:

public bool Update(Activity entity)
    {
        try
        {
            var activity = db.Activities.Find(entity.ActivityId);
            activity.Name = entity.Name;
            activity.Description = entity.Description;
            activity.ActivityGroupId = entity.ActivityGroupId;
            activity.AccountantCode = entity.AccountantCode;
            activity.DonorCode = entity.DonorCode;
            activity.ParentActivityId = entity.ParentActivityId;
            activity.ProjectId = entity.ProjectId;
            activity.ContractorId = entity.ContractorId;
            activity.UserInCharge = entity.UserInCharge;
            activity.StartDate = entity.StartDate;
            activity.EndDate = entity.EndDate;
            activity.TotalBudget = entity.TotalBudget;
            activity.BudgetLimit = entity.BudgetLimit;
            activity.AmountOnPaper = entity.AmountOnPaper;
            activity.PaidAmount = entity.PaidAmount;
            activity.TheRest = entity.TheRest;
            activity.IsLocked = entity.IsLocked;
            activity.Status = entity.Status;
            activity.ModifiedBy = entity.ModifiedBy;
            activity.ModifiedDate = DateTime.Now;
            db.SaveChanges();

            //Sum Total Budget in Project
            var projectUpdate = db.Projects.Find(entity.ProjectId);
            var totalBudget = projectUpdate.TotalBudget ?? 0;
            projectUpdate.TotalBudget = (entity.TotalBudget ?? 0) + totalBudget;
            db.SaveChanges();

            return true;
        }
        catch (Exception ex)
        {
            //logging
            return false;
        }

    }

ActivityController:

public ActionResult Edit(Activity activity)
    {
        try
        {
            if (ModelState.IsValid)
            {
                var dao = new ActivityDao();

                var result = dao.Update(activity);
                if (result)
                {
                    SetAlert("Updated successfully!", "success");
                    return RedirectToAction("Index", "Activity");
                }
                else
                {
                    ModelState.AddModelError("", "Updated unsuccessfully!");
                }
            }
            SetViewBag(activity.ActivityGroupId);
            SetViewBag(activity.ActivityId);
            SetViewBag(activity.ProjectId);
            SetViewBag(activity.ContractorId);
            SetViewBag(activity.UserInCharge);
            return View(activity);
        }
        catch 
        {
            return View("Index");
        }

    }

Золото - это когда я сохраняю / обновляю активность, если Activity.TotalBudget не равен NULL, тогда выполните:

  1. Поиск проектов имеет аналогичный ProjectId как ProjectId в db.Activites
  2. Projects.TotalBudget = ** текущий ** Projects.TotalBudget + Activities.TotalBudget
  3. SaveChanges для db.Projects

Кажется, с кодами выше, это только сохранение / обновление действий и делать 1 и 2, а не 3, как я ожидал. Эта проблема заняла у меня один день, и я также тщательно искал похожий вопрос, но не смог найти ни одного. Поэтому я разместил это здесь, надеюсь, некоторые из вас, ребята, могут помочь. Спасибо ^^

...