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