我使用NHibernate來訪問數據層。 我有一個實體在內存中以前加載,並進行更改以便在數據庫後保存。問題出在我的應用程序同時在某些機器上運行時,而其他用戶已從數據庫中刪除了我在內存中保存的同一對象並且我想保存。當我嘗試保存更改或刪除此實體時,會觸發StaleStateException。StaleStateException當保存被其他會話刪除的實體(併發)
我檢查,如果數據庫調用的這種方式session.Get<T>
存在的實體(it's得到一個空成功地):
using (var session = NHibernateSessionHelper.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var entity = session.Get<T>(persistObject.Id);
return entity == null ? false : true;
}
}
問題是當我不能當實體已被刪除區分由其他會話/用戶(因此我的實體在內存中已過時)或實體最近已創建並能夠保存。 我認爲唯一的解決方案是實現一種機制來檢查實體是否已經從數據庫中保存或加載,以便丟棄實體或在繼續時保存。
有沒有辦法通過使用nhibernate檢查此行爲?我試着用session.Refresh() and session.Get<T>
,但我仍然不知道對象是否是新的,並準備保存或過時。
非常感謝。
是的,我同意你的意見(是我的初步意見),但我不知道NHibernate中是否有任何機制來獲取實體是否過時。我有一個解決方法,在實體中創建一個布爾屬性,指明是否已由用戶創建(創建新元素)或由Nhibernate填充。 – Carlos 2013-03-15 12:37:37