2014-10-30 48 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) 
    
之前清除会话
相关问题