【问题标题】:NHibernate requires a transaction in order for updates to succeedNHibernate 需要一个事务才能使更新成功
【发布时间】:2013-01-10 12:50:03
【问题描述】:

使用 NHibernate,在我的 NUnit 测试中,我可能会调用 session.Delete(_user),其中 _user 是一个持久对象。

我的问题似乎是,除非我在事务中包含此更新和任何其他更新,否则它永远不会成功。

所以,

CurrentSessionContext.Bind(GetHibernateSessionFactory().OpenSession());
ITransaction trans=session.BeginTransaction()
session.Delete(_user);
trans.Commit();
CurrentSessionContext.Unbind(GetHibernateSessionFactory())

有效。

但是,

CurrentSessionContext.Bind(GetHibernateSessionFactory().OpenSession());
session.Delete(_user);
CurrentSessionContext.Unbind(GetHibernateSessionFactory())

没有,但没有报告异常或问题。

有什么想法吗?

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

    NHibernate 只会在刷新会话时向数据库发送更新/插入/删除。

    您可以通过调用 Flush() 显式执行此操作,但您还应该查看配置:您也可以在那里指定默认的刷新行为。

    有趣的读物:

    NHibernate ISession Flush: Where and when to use it, and why? NHibernate Flush-- How it works?

    【讨论】:

    • 已排序!该链接非常有用。总之,始终使用事务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多