我的问题是当我想只更新数据库中的一个对象时,列表中的每个对象都在数据库中更新。我使用相同的会话加载列表,我无法进行其他会话以进行更新,因为我收到错误:非法尝试将集合与两个打开的会话关联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;
}
谢谢!
答案 0 :(得分:1)
您有两个选择:
保存在新会话中
你做的是正确的,但唯一的是,你需要从会话中逐出实体来获取数据。做这样的事情
sessionWhichFetchedTheData.evict(item)
private ISession session = NHibernateConnexion.OpenSession();
using (var transaction = session.BeginTransaction()
{
session.Update(item);
transaction.Commit();
}
保存在当前会话中但在保存之前清除会话
session.clear()
sessionThatFetchedTheData.SaveOrUpdate(item)