Попробуйте добавить атрибут [ConcurrencyCheck] в свойстве TimeStamp

аюсь реализовать приложение, следуя примеру на этой странице:http://www.asp.net/entity-framework/tutorials/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application

У меня есть класс домена с отметкой времени в качестве поля проверки параллелизма:

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

В моем Edit.aspx у меня есть метка времени как скрытое поле (я использую модель представления):

<%: Html.HiddenFor(model => model.PurchaseOrder.Timestamp) %>

Это мой метод Edit ():

public ActionResult Edit(int id, FormCollection collection) {
     var purchaseOrder = db.PurchaseOrders.Find(id);
     UpdateModel(purchaseOrder, "PurchaseOrder", collection);

     db.Entry(purchaseOrder).State = EntityState.Modified;
     db.SaveChanges();
}

Я открыл одну и ту же страницу редактирования в 2 отдельных браузерах одновременно (чтобы их временная метка была одинаковой), и обновляю их одну за другой.

Когда я обновляю вторую страницу, я ожидал DbUpdateConcurrencyException. Но я ничего не получаю.

Я думаю, что произошло на второй странице, что я снова получаю объект purchaseOrder из БД в действии Edit:

var purchaseOrder = db.PurchaseOrders.Find(id);

Таким образом, отметка времени является новой отметкой времени из-за предыдущего редактирования.

Но я ожидал, что UpdateModel () заменит значение Timestamp из формы formcollection. Очевидно, это не тот случай.

Как я могу установить значение Временной метки извлеченного приобретенного заказа в скрытое поле, чтобы был обнаружен параллелизм?

Ответы на вопрос(1)

Ваш ответ на вопрос