2014-10-30 47 views
2

我的問題是當我只想更新數據庫中的一個對象時,我的列表中的每個對象都在數據庫中更新。我使用同一個會話加載列表,並且無法讓其他會話進行更新,因爲出現錯誤:非法嘗試將集合與兩個打開的會話nhibernate相關聯。NHibernate/Transaction如何提交只有一個對象,而不是整個會話

有我的代碼,我用來進行更新。

private ISession session = NHibernateConnexion.OpenSession(); 
using (var transaction = session.BeginTransaction()) 
{ 
    session.Update(item); 
    transaction.Commit(); 
} 

項目是我想要更新的對象。

,我用它來裝載整個列表中的代碼:

public IList<Item> RetrieveAll() 
{ 
    var result = from i in session.Query<Item>() 
       orderby i.EstActif descending 
       select i; 

    IList<Item> listeTemp = result.ToList(); 
    return listeTemp; 
} 

謝謝!

回答

1

你有2種選擇:

  1. 保存在新的會話

    什麼,你做的是對的,但唯一的一點是,你需要逐出使用您獲取的數據從會話實體。做這樣的事情

    sessionWhichFetchedTheData.evict(item) 
    
    private ISession session = NHibernateConnexion.OpenSession(); 
    using (var transaction = session.BeginTransaction() 
    { 
        session.Update(item); 
        transaction.Commit(); 
    } 
    
  2. 保存在當前會話,但節省

    session.clear() 
    sessionThatFetchedTheData.SaveOrUpdate(item) 
    
之前清除會話
相關問題