Сущности и отображения, о которых я говорю в этом вопросе, можно найти здесь :)
Вот контекст:
У меня есть родительская модель представления, которая помогает управлять некоторыми объектами и имеет собственный сеанс.
На этой виртуальной машине я открываю другую модель представления (также с собственным сеансом), делаю некоторые изменения в сущности (добавляю и / или удаляем дочерние элементы), и когда я проверяю изменения, я фиксирую сеанс и предупреждаю первая модель представления для обновления дисплея:
public void Validate()
{
using (var tx = Session.BeginTransaction())
{
try
{
SelectedTeam.ClearRoster();
foreach (var teamPlayer in TeamPlayers)
SelectedTeam.AddPlayer(teamPlayer);
teamsRepository.SaveOrUpdate(SelectedTeam);
tx.Commit();
}
catch (Exception ex)
{
tx.Rollback();
}
finally
{
if (tx.WasCommitted)
ServiceLocator.Current.GetInstance<Mediator>().NotifyColleagues(MediatorMessages.DisplayEntityInfos, SelectedTeam.Id);
}
}
}
Вот неисправный метод родительской виртуальной машины:
public void RefreshEntitiesListAndDisplayEntityInfos(int selectedEntityId)
{
TEntity entity = entitiesRepository.Load(selectedEntityId);
Session.Refresh(entity);
//...
}
Исключение выдается в строке обновления:
NHibernate.UnresolvableObjectException
И сообщение:
Строка с указанным идентификатором не существует [Emidee.CommonEntities.PlayerInTeam # 3
Я могу открывать и изменять сущность несколько раз, но создается впечатление, что исключение выдается, когда я удаляю дочернего элемента, затем добавляю другого и, наконец, удаляю другого.
После некоторых чтений в Интернете кажется, что когда я обновляю сущность, и потому что я изменил отношение HasMany (например, потому что я удалил игрока), NH пытается перезагрузить удаленную строку.
Я пытался добавить оператор NotFound.Ignore для HasMany в мои сопоставления, я пытался принудительно создать новый запрос к БД вместо Load, но я все еще получаю это исключение.
Кто-нибудь знает, как я мог это исправить?
Заранее спасибо
Mike