DBContext与编辑/更新MVC 4 EF c#有问题#

时间:2013-11-26 16:57:58

标签: c# entity-framework asp.net-mvc-4 dbcontext

我仍然是EF和MVC 4的新手,我在处理一个相当简单的记录更新方面遇到了一些问题。 我想要做的是基本上对记录进行更改的历史记录,因此我经常需要在用新值覆盖它之前记录该记录的先前值。

我一直在遇到Unique键问题,或者根据我的编码方式,db.savechanges()会在只更新时创建一个额外的条目。

对我做错了什么的想法?

谢谢,

    [HttpPost]
    public ActionResult Edit(UrlRedirect urlredirect)
    {
        using (var db = new Context())
        {
            UrlRedirect old_url = db.UrlRedirects.Find(urlredirect.ID);
            string notes = old_url.NewUrl;
            if (ModelState.IsValid)
            {
                ChangeRecord cr = new ChangeRecord();
                cr.Author = User.Identity.Name;
                cr.Date = DateTime.Today;
                cr.Change = "Modified";
                cr.UrlRedirect = urlredirect;
                cr.Notes = notes;
                db.ChangeRecords.Add(cr);

                db.Entry<UrlRedirect>(old_url).CurrentValues.SetValues(urlredirect);
                db.Entry(old_url).State = EntityState.Modified;
                db.SaveChanges();

                return RedirectToAction("Index");
            }
            return View(urlredirect);
        }
    }

1 个答案:

答案 0 :(得分:0)

您是否可以访问数据库本身?我刚创建了一个数据库表更新触发器。

我有一个表和一个具有相同模式的存档表。我使用ID和序列号在存档表上创建PK。这样做非常好,我只需要担心在主表中增加序列号。

ALTER TRIGGER [QAForum].[AnswerUpdate] ON [QAForum].[Answer] AFTER UPDATE
AS 
BEGIN
  SET NOCOUNT ON;
  INSERT INTO [QAForum].[AnswerArchive] (ID, QuestionID, AuthorID, Sequence, [Message], Rating, IsAnswer, Modified)
  SELECT ID, QuestionID, AuthorID, Sequence, [Message], Rating, IsAnswer, Modified FROM deleted d;
END

当我在ActionResult中对上一个表进行更改时,我只是递增序列号,让数据库完成其余的工作。