NHibernate刷新模式。提交自动保存脏对象

NHibernate刷新模式。提交自动保存脏对象,nhibernate,commit,flush,autosave,Nhibernate,Commit,Flush,Autosave,我似乎错过了一些东西: 我有一个应用程序,每个应用程序方法使用一个会话,并使用延迟加载 我已经设置了会话FlushMode.Commit,尽管我从未开始事务并提交它,但NHibernate似乎仍然自动将脏对象保存到DB(SQLCe)中 谁能告诉我我做错了什么 我的一些代码: public Repository(ISessionProvider sessionProvider) { _sessionProvider = sessionProvider;

我似乎错过了一些东西:

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

我已经设置了会话FlushMode.Commit,尽管我从未开始事务并提交它,但NHibernate似乎仍然自动将脏对象保存到DB(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;
    }
公共存储库(ISessionProvider sessionProvider)
{
_sessionProvider=sessionProvider;
_会话=_sessionProvider.OpenSession();
_session.FlushMode=FlushMode.Commit;
}
公共IList GetAll(),其中T:class
{
var-criteria=_session.CreateCriteria();
var list=criteria.list();
退货清单;
}

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


现在工作得很好,因为我需要惰性功能,所以仍然使用每个应用程序的会话。

如果不按照预期的那样通过代码创建隐式事务,则会创建隐式事务。使用
FlushMode。如果您不需要此行为,请不要使用
。还要注意,(n)hibernate团队不鼓励使用每个应用程序的会话OK,我想这里最好的做法是改变我使用会话的方式,并更好地使用NH。谢谢:)恭喜你搞定了这个!如果您能够,请确保将您的答案标记为“已接受”(使用绿色复选标记),以便社区中的其他人可以从您的成功中学习。干杯~