我需要将数据保存到多个表(projects
,products
,upsell
,cost
等)。
Project
与products
和upsell
具有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);