如何在Asp.net MVC中汇总多个表的数据

时间:2019-05-12 10:41:24

标签: ajax asp.net-mvc entity-framework

我需要将数据保存到多个表(projectsproductsupsellcost等)。

Projectproductsupsell具有1对多的关系,与cost具有1对1的关系。

我已经在视图模型的帮助下使用ajax发送了数据

我试图将项目添加到表中,并且将视图模型中的所有表数据提供给表,将新项添加到表中时效果很好,但是会引发以下错误:

  

附加类型为“ Project”的实体失败,因为相同类型的另一个实体已经具有相同的主键值。如果图形中的任何实体具有相互冲突的键值,则使用“附加”方法或将实体的状态设置为“不变”或“修改”时,可能会发生这种情况。这可能是因为某些实体是新实体,尚未收到数据库生成的键值。在这种情况下,请使用“添加”方法或“已添加”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。

我不知道它为什么会抛出,这是我到目前为止所做的代码

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

0 个答案:

没有答案