2013-11-26 71 views
0

我對EF和MVC 4仍然很新,我在操作相當平凡的記錄更新時遇到了一些問題。 我想要做的事實質上是對記錄進行更改的歷史記錄,因此我經常需要在用新值覆蓋之前記錄該記錄的前一個值。遇到問題DBContext與編輯/更新MVC 4 EF c#

我已經遇到了獨特的關鍵問題,或者取決於我如何編碼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); 
     } 
    } 
+0

哪個字段是記錄的*關鍵字段*? –

+0

@MichaelPerrenoud爲UrlRedirect表是'ID' –

+0

@michaelperrenoud對不起,我的意思是我想要NewUrl字段 - 我已經指出我注意到 –

回答

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我只是遞增序列號,並讓數據庫做休息的方式。

+0

,我會認真考慮這條路線。我通常不會執行數據庫程序,但是這個觸發器應該可以工作,謝謝你爲我提供了一些選擇。 –

+0

@RobertChan不客氣。大約6個月前我對這個相同的概念感到失望。 –