Свободный nHibernate: не существует строки с данным идентификатором. Ошибка происходит, когда 2 пользователя удаляют какой-либо элемент - PullRequest
3 голосов
/ 07 апреля 2011

Свободно 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 Ответ

2 голосов
/ 07 апреля 2011

это на самом деле ХОРОШО, что вы получаете это исключение.это то, что называется оптимистичным параллелизмом (google it; здесь - достаточно простое объяснение).
вам нужно перехватить это исключение и перевести его в некоторый понятный пользователю формат.например:

catch (WhateverConcurrencyException ex)
{
   throw new UserReadableException("The object with id "+id+" no longer exists");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...