Я пытаюсь реализовать приложение, следуя примеру на этой странице: 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.Очевидно, что это не так.
Как я могу установить значение метки времени извлеченного приобретенного заказа в значение в скрытом поле, чтобы обнаруживать параллелизм?