的單位和我談論這個問題的映射,可以發現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