的单位和我谈论这个问题的映射,可以发现here :)刷新实体抛出NHibernate.UnresolvableObjectException
这里是上下文:
我有一个父视图 - 模型,它有助于管理一些实体,并有自己的会话。
从这个VM中,我打开另一个视图模型(也有它自己的会话),对实体做一些更改(添加和/或删除子项),当我验证更改时,我提交会话并发出警告第一视图模型刷新显示器:
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试图重新加载删除的行。我试图在我的映射中的HasMany添加一个NotFound.Ignore语句,我试图强制一个新的查询到数据库而不是一个负载,但我仍然得到这个异常。
有人知道我该如何解决这个问题吗?
在此先感谢
迈克
为什么不将使用的会话传递给“子”viewmodel?我认为这将解决问题并防止重新获取集合。 – Jay 2010-07-16 18:56:22
因为我尝试应用ayende在这里执行的操作:http://msdn.microsoft.com/en-us/magazine/ee819139.aspx – Mike 2010-07-16 19:45:01