#c#-4.0 #fluent-nhibernate
#c #-4.0 #fluent-nhibernate
Вопрос:
Fluent NHibernate: строки с заданным идентификатором не существует.
У меня есть объект, у которого есть коллекция элементов. Моя проблема в том, что ошибка возникает, когда 2 пользователя видят объект, а один пользователь удаляет какой-либо элемент. Другой пользователь должен увидеть обновленный объект без удаленного элемента, а не исключение.
Я попытался:
session.Evict(p);
// the following line will throw an exception
session.Refresh(p);
No row with the given identifier exists[Sistema.ERPxx.Pedidos.ItemPedido#74435]
В сопоставлении указано:
this.HasMany<ItemPedido>(v => v.Items).KeyColumn("numero_pedido").Cascade.All().OrderBy("descricao_produto").LazyLoad().NotFound.Ignore();
Я столкнулся с этой проблемой и не знаю, как обновить элемент, чтобы получить обновления, которые сделал другой пользователь.
Как обновить объект элементами, не получая исключения?
Ответ №1:
на самом деле хорошо, что вы получаете это исключение. это то, что называется оптимистичным параллелизмом (погуглите это; вот достаточно простое объяснение).
что вам нужно сделать, так это перехватить это исключение и перевести его в какой-нибудь понятный пользователю формат. например:
catch (WhateverConcurrencyException ex)
{
throw new UserReadableException("The object with id " id " no longer exists");
}
Комментарии:
1. Я хочу, чтобы в этом случае не было исключения, потому что ожидается исчезновение строки. Поскольку пользователь отредактировал и удалил некоторые неиспользуемые строки, другой пользователь должен увидеть без каких-либо ошибок новый объект с текущими элементами. Как я могу это сделать? Обновить объект без исключения?