如何使当前主键更新本身而不是生成新主键Asp.net mvc的表

时间:2017-03-28 09:59:15

标签: asp.net entity-framework asp.net-mvc-4 model-view-controller insert-update

我有一个应用程序,商店可以完成调查问卷。

在这个应用程序中我有两个表

  1. db.StoreAud(pk:AuditId) which contains all the stores information
  2. db.storequests(pk:ReviewId) which holds the all questions information. AuditId is a foreign key in db.storequests table.
  3. 现在问题是,如果商店完成调查问卷,数据完全保存在数据库中,然而同样的商店再次调查问卷,db.storequests在数据库中使用新的主键值而不是更新上一行。

    请查看以下图片了解更多信息, Image

    我希望突出显示的行更新第二行数据。

    问题是,如果同一商店再次进行相同的调查问卷,我该如何更新上一行。希望这可以做到。

      

    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)

您需要将实体状态设置为已修改而不是执行添加。

请查看下面的示例示例

 StoreAudit findingAudit = db.StoreAudit.Find(storequestions.AuditId);
 findingAudit.ReadOnlyTickBox = true;
db.Entry(findingAudit ).State = EntityState.Modified;
db.SaveChanges();