NHibernate / Transaction如何只提交一个对象而不是整个会话

时间:2014-10-30 14:48:28

标签: c# mysql list session nhibernate

我的问题是当我想只更新数据库中的一个对象时,列表中的每个对象都在数据库中更新。我使用相同的会话加载列表,我无法进行其他会话以进行更新,因为我收到错误:非法尝试将集合与两个打开的会话关联nhibernate。

我用我的代码进行更新。

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 个答案:

答案 0 :(得分:1)

您有两个选择:

  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)