【问题标题】:NHibernate FlushMode.Commit auto saves dirty objectsNHibernate FlushMode.Commit 自动保存脏对象
【发布时间】:2012-05-11 11:35:45
【问题描述】:

我似乎在这里错过了一些东西:

我有一个应用程序,每个应用程序方法使用一个会话并使用延迟加载。

我已经设置了会话 FlushMode.Commit 并且似乎 NHibernate 仍然自动将我的脏对象保存到数据库 (SQLCe) 虽然我从未开始事务并提交它。

谁能告诉我我做错了什么?

我的一些代码:

    public Repository(ISessionProvider sessionProvider)
    {
        _sessionProvider = sessionProvider;
        _session = _sessionProvider.OpenSession();
        _session.FlushMode = FlushMode.Commit;
    }

    public IList<T> GetAll<T>() where T : class
    {
        var criteria = _session.CreateCriteria<T>();
        var list = criteria.List<T>();
        return list;
    }

【问题讨论】:

  • 如果您不按代码创建一个,则会创建隐式事务,因为人们期望它们也会自动提交。如果您不需要此行为,请使用 FlushMode.Never
  • 还要注意,(n)hibernate 团队不鼓励每个应用程序使用会话
  • 好的,我想最好的办法是改变我处理会话的方式,让它成为 NH 的更好实践。谢谢:)

标签: nhibernate commit flush autosave


【解决方案1】:

当我在 UI 中创建脏对象时,似乎有另一个线程正在刷新同一个会话,我猜这只是我的应用程序中的一个错误。

现在很好用,因为我需要 Lazy 功能,所以仍然为每个应用程序使用一个会话。

【讨论】:

  • 恭喜你解决了这个问题!如果可以,请确保将您的答案标记为“已接受”(使用绿色复选标记),以便社区中的其他人可以从您的成功中学习。干杯~
猜你喜欢
  • 2012-10-03
  • 1970-01-01
  • 2010-10-06
  • 2013-08-23
  • 1970-01-01
  • 2013-08-14
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多