1

我目前正在关注本教程

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) 发生。

我在相关表中创建了时间戳字段(在我的项目中称为“组”)。

我的代码如下

在 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; }
 }
}

有谁知道为什么没有发生此异常?

4

1 回答 1

0

确保您已通过模型绑定提供 Timestamp 值。

而且您还需要由另一个人更改您的组对象。您可以打开编辑页面两次并更改某些字段,然后单击保存按钮。应该出现异常。

于 2013-04-23T15:24:22.967 回答