我有一个应用程序,商店可以完成调查问卷。在这个应用程序中,我有两个表db.StoreAud(pk:AuditId),它包含所有商店信息,db.storequests(pk:ReviewId)包含所有问题信息。
AuditId是db.storequests表中的外键。现在这里是一个问题,如果商店完成调查问卷,数据完全保存在数据库中,然而同样的商店再次调查问卷,db.storequests在数据库中使用新的主键值创建新行而不是更新之前的行。问题是如果同一商店再次进行相同的调查问卷,我该如何更新前一行。希望这可以做到。
db.StoreAUD
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
[Column(Order = 1)]
public int AuditId { get; set; }
public string Date { get; set; }
public int StoreNumber { get; set; }
public string StoreName { get; set; }
db.storequests
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int ReviewId { get; set; }
public int AuditId { get; set; }
public int QuestionOne { get; set; }
public string QuestionTwo { get; set; }
public string QuestionThree { get; set; }
public string QuestionFour { get; set; }
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(StoreQuestions storequestions)
{
if (ModelState.IsValid)
{
StoreAudit findingAudit = db.StoreAudit.Find(storequestions.AuditId); // grabbing the id from th store audit table
findingAudit.ReadOnlyTickBox = true;
db.StoreQuestions.Add(storequestions);
db.SaveChanges();
return RedirectToAction("Details", "Audit", new { id = storequestions.AuditId });
}
return View(storequestions);
}
答案 0 :(得分:0)
我会在Single Responsibility Principle之后将您的更新逻辑分成新的Update
操作:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Update(StoreQuestions storequestions)
{
if (ModelState.IsValid)
{
StoreAudit findingAudit = db.StoreAudit.Find(storequestions.AuditId);
findingAudit.ReadOnlyTickBox = true;
// update objects here
db.SaveChanges();
return RedirectToAction("Details", "Audit", new { id = storequestions.AuditId });
}
return View(storequestions);
}
}