Как обновить данные нескольких таблиц в Asp.net MVC - PullRequest
0 голосов
/ 12 мая 2019

Мне нужно сохранить данные в несколько таблиц (projects, products, upsell, cost и т. Д.).

Project имеет отношение 1 ко многим с products и upsell и 1 к 1 с cost.

Я отправил данные с помощью ajax с помощью модели представления

Я попытался добавить проект в таблицу, и он передал ей все данные таблицыиз модели представления он работает хорошо при добавлении нового элемента в таблицы, но выдает следующую ошибку:

Не удалось присоединить объект типа «Проект», поскольку другой объект того же типа уже имеетто же значение первичного ключа.Это может произойти при использовании метода «Присоединить» или установке состояния объекта на «Неизменен» или «Изменен», если какие-либо объекты в графе имеют конфликтующие значения ключей.Это может быть потому, что некоторые объекты являются новыми и еще не получили сгенерированные базой данных значения ключей.В этом случае используйте метод «Добавить» или «Состояние добавленной» сущности для отслеживания графика, а затем установите для состояния не новых сущностей значение «Неизмененный» или «Измененный», в зависимости от ситуации.

Я не знаю, почему это выдает, вот код, который я сделал до сих пор

public ActionResult SaveProject(SaveViewModel svm)
{
        string userId = User.Identity.GetUserId();
            svm.ProjectData.UserID = userId;
            svm.ProjectData.Optins = svm.Optins?.ToList();
            svm.ProjectData.Upsells = svm.Upsells?.ToList();
            svm.ProjectData.Products = svm.Products?.ToList();
            svm.ProjectData.Memberships = svm.Memberships?.ToList();
            svm.ProjectData.Webinars = svm.Webinars?.ToList();
            svm.ProjectData.Cost = svm.CostModule;
            if (svm.ProjectData.ID > 0)
            {
                var project = _adsDbContext.Project.SingleOrDefault(x => x.ID == svm.ProjectData.ID);

                if (project!=null)
                {
                    _adsDbContext.Entry(svm.ProjectData).State = EntityState.Modified;
                }
                _adsDbContext.SaveChanges();
            }
            else { 
                _adsDbContext.Project.Add(svm.ProjectData);
            _adsDbContext.SaveChanges();
            }
         return Json(new { ID = svm.ProjectData.ID });
}

// data sent from ajax
SaveViewModel = {
            CostModule: $data,
            ProjectData: { ID: projectID, name: projectName },
            Optins: OptinData,
            Products: ProductData,
            Memberships: MembershipData,
            Upsells: UpsellData,
            Webinars: WebinarData

        }

Save('/Adds/SaveProject', SaveViewModel);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...