2012-10-11 31 views
1

我目前按照本教程DbUpdateConcurrencyException不存在的

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application

不過,我似乎無法得到發生併發異常(DbUpdateConcurrencyException)。

我在相關表格中創建了一個Timestamp字段(在我的項目中稱爲'Group')。

我的代碼在GroupController.cs如下

[HttpPost] 
public ActionResult Edit(Group group) 
{ 
    try 
    { 
     if (ModelState.IsValid) 
     { 

      medEntitiesDB.Entry(group).State = EntityState.Modified; 
      medEntitiesDB.SaveChanges(); 
      return RedirectToAction("Index"); 

     } 


    } 

    catch (DbUpdateConcurrencyException ex) 
    { 
     var entry = ex.Entries.Single(); 
     var databaseValues = (Group)entry.GetDatabaseValues().ToObject(); 
     var clientValues = (Group)entry.Entity; 
     if (databaseValues.GroupName != clientValues.GroupName) 
      ModelState.AddModelError("Name", "Current value: " 
       + databaseValues.GroupName); 
     ModelState.AddModelError(string.Empty, "The record you attempted to edit " 
      + "was modified by another user after you got the original value. The " 
      + "edit operation was canceled and the current values in the database " 
      + "have been displayed. If you still want to edit this record, click " 
      + "the Save button again. Otherwise click the Back to List hyperlink."); 
     group.Timestamp = databaseValues.Timestamp; 
    } 
    catch (DataException) 
    { 
     //Log the error (add a variable name after Exception) 
     ModelState.AddModelError(string.Empty, "Unable to save changes. 
      Try again, and if the problem persists contact your system administrator."); 
    } 

    return View(group); 
} 

我的 '集團' 類是如下

namespace MyClasses 
{ 
using System; 
using System.Collections.Generic; 

using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.Mvc; 


public partial class Group 
{ 

    public System.Guid GroupID { get; set; } 
    public string GroupName { get; set; } 
    public System.DateTime DateCreated { get; set; } 

    [Timestamp] 
    public byte[] Timestamp { get; set; } 
} 
} 

有誰知道爲什麼這個異常沒有發生?

+1

您可能沒有正確地按照教程進行操作,並且錯過了一些步驟,例如在表單中包含'Timestap'作爲隱藏字段。 –

+0

@ Html.HiddenFor(model => model.Timestamp)已包含在我的'編輯'視圖中,所以它必須是別的。 – jjc99

+1

是的,它一定是別的東西,因爲文章中的代碼工作正常。 –

回答

0

確保您通過模型綁定提供了Timestamp值。

而且您還需要由另一個人更改您的組對象。您可以打開編輯頁面兩次並更改某個字段並單擊保存按鈕。應該發生異常。

相關問題