当外键具有相同的值ASP.NET mvc时,如何更新数据库表行

时间:2017-03-27 13:42:16

标签: entity-framework asp.net-mvc-4 sql-update insert-update

我有一个应用程序,商店可以完成调查问卷。在这个应用程序中,我有两个表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);
    }

1 个答案:

答案 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);
         }
     }