比以往任何时候都更困惑于工作单元vs.无工作单元,以及回避存储库中事务的微观管理

本文关键字:工作 单元 存储 微观 管理 事务 vs 任何时候 于工作 | 更新日期: 2023-09-27 17:54:23

我已经得出结论,没有理由在NHibernate会话之上使用UnitOfWork,并且在这个问题中询问关于不必为每个数据库持久化操作显式创建事务的最佳方法。

只能被重定向回工作单元的概念。好吧,进一步的调查把我带回到我最初没有在NHibernate之上实现一个单独的工作单元模式的地方(一个例子,在其他例子中)。

我的问题是如何不使用工作单元,而不是在存储库中微观管理事务并保持其分离?

比以往任何时候都更困惑于工作单元vs.无工作单元,以及回避存储库中事务的微观管理

您仍然可以将存储库与事务分开。您需要管理的主要内容是会话的生命周期。

在你的事务管理器中,你可以这样写

public class TransactionManager
{
    private ISession session;
    public TransactionManager(ISession session)
    {
        this.session = session;
    }
    public void BeginTransaction()
    {
         session.BeginTransaction();
    }
    public void CommitTransaction()
    {
        session.Transaction.Commit();
    }
}

然后在存储库中注入会话

public class Repository
{
    private ISession session;
    public Repository(ISession session)
    {
        this.session = session;
    }
    public T Get<T>(int id)
    {
        return session.Get<T>(id);
    }
}

如果您在事务管理器中使用与存储库相同的会话。您的存储库将使用显式事务进行操作。