gpt4 book ai didi

c# - NHibernate/Transaction 如何只提交一个对象而不提交整个 session

转载 作者:行者123 更新时间:2023-11-29 02:59:07 24 4
gpt4 key购买 nike

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

有我用来进行更新的代码。

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

Item是我要更新的对象。

我用来加载整个列表的代码:

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. 在新 session 中保存

    您所做的是正确的,但唯一的问题是,您需要从用于获取数据的 session 中逐出该实体。做这样的事情

    sessionWhichFetchedTheData.evict(item)

    private ISession session = NHibernateConnexion.OpenSession();
    using (var transaction = session.BeginTransaction()
    {
    session.Update(item);
    transaction.Commit();
    }
  2. 在当前 session 中保存,但在保存前清除 session

    session.clear()
    sessionThatFetchedTheData.SaveOrUpdate(item)

关于c# - NHibernate/Transaction 如何只提交一个对象而不提交整个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26656119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com