Сущность контроллера ASP.NET MVC 5 возвращает context.model.tablename вместо System.Data.Entity.Proxies - PullRequest
0 голосов
/ 19 февраля 2019

У меня происходит странная ситуация.Когда запись сохранена, вызывается метод, который выполняет вычисления для всей иерархии уровней таблицы.

Когда этот расчет вызывается без его участия в методе POST / SAVE, все в порядке, все уровни будутбыть возвращены и рассчитаны правильно.Все объединенные записи возвращаются как System.Data.Entity.Proxies.

. Когда вычисление вызывается из метода POST / SAVE, таблица (являющаяся нижней таблицей соединения в иерархии), на которую влияет сохраненная запись,не возвращается как тип System.Data.Entity.Proxies.Возвращается как тип Context.Model.TableName.

Поскольку запись для этой таблицы возвращается как Context.Model.TableName, она не возвращает объединенные записи для этих записей.Это означает, что вычисления не выполняются.

Я полагаю, что это как-то связано с тем фактом, что таблица, которая возвращается неверно, является той же, что была сохранена перед вызовом вычисления.

Что я могу сделать, чтобы получить новую загрузку и вернуть все объединенные таблицы как System.Data.Entity.Proxies тип из вызова в SectionItemEdit?

Метод сохранения

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SectionItemEdit([Bind(Include = "Id,Qty,Name,Description,SectionId,Status,ProjectedEach")] SectionItem sectionItem)
{
    if (ModelState.IsValid)
    {
        db.Entry(sectionItem).State = EntityState.Modified;
        db.SaveChanges();

        Section sect = db.Sections.Find(sectionItem.SectionId);

        CalculateProject(sect.Project.Id);

        return RedirectToAction("SectionItem", new { id = sectionItem.Id });
    }

    return View("SectionItemEdit", new { id = sectionItem.Id });
}

Метод расчета

private void CalculateProject(long? id)
{
    Project project = db.Projects.Find(id);

    if (true)
    {
        decimal projectTotal = 0.0m;
        decimal projectedTotal = 0.0m;

        foreach(Section section in project.Sections)
        {
            decimal sectionEach = 0.0m;
            decimal sectionTotal = 0.0m;
            decimal projectedEach = 0.0m;

            // This is the affected table (SectionItem)
            foreach (SectionItem sectionItm in section.SectionItems) 
            {
                decimal sectionItemTotal = 0.0m;
                decimal sectionItemEach = 0.0m;
                SectionItem sectionItemSave = db.SectionItems.Find(sectionItm.Id);

                foreach (SecItemLink secItemLink in sectionItm.SecItemLinks)
                {
                    if(secItemLink.Used)
                    {
                        sectionItemEach += secItemLink.ItemEachCost;
                        sectionItemTotal += sectionItm.Qty * secItemLink.ItemEachCost;
                    }
                    else
                    {
                        sectionItemEach = 0;
                        sectionItemTotal = 0;
                    }

                    if (sectionItm.SecItemLinks.LastOrDefault().Equals(secItemLink))
                    {
                         sectionItemSave.ActualEach = sectionItemEach;
                         sectionItemSave.ActualTotal = sectionItemTotal;
                    }
                }

                sectionItemSave.ProjectedEach = sectionItm.ProjectedEach;
                sectionItemSave.ProjectedTotal = sectionItm.ProjectedEach * sectionItm.Qty;
                db.SaveChanges();
                db.Entry(project).Reload();

                projectedEach += sectionItm.ProjectedTotal;
                sectionEach += sectionItemTotal;

                if (section.SectionItems.LastOrDefault().Equals(sectionItm))
                {
                    sectionTotal += sectionEach * section.Qty;

                    Section sectionSave = db.Sections.Find(section.Id);
                    sectionSave.ActualEach = sectionEach;
                    sectionSave.ActualTotal = sectionTotal;
                    sectionSave.ProjectedEach = projectedEach;
                    sectionSave.ProjectedTotal = projectedEach * section.Qty;
                    db.SaveChanges();
                    db.Entry(project).Reload();
                }
            }

            projectTotal += sectionTotal;
            projectedTotal += section.ProjectedTotal;
        }

        project.ActualCost = projectTotal;
        project.ProjectedCost = projectedTotal;

        db.SaveChanges();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...