没有存储库的建议数据访问模式

时间:2013-08-08 13:47:07

标签: nhibernate repository-pattern data-access-layer

我想直接从应用程序服务访问ISession(不使用存储库(http://ayende.com/blog/3955/repository-is-the-new-singleton))但是应用程序服务单元测试很难,Nhibernate数据访问代码增加了代码的复杂性(没有存储库模拟,我不想要模拟存储库或内存数据库,如sqllite进行测试)

是否有任何有效的方式从服务层访问ISession?

1 个答案:

答案 0 :(得分:1)

我使用sessionHelper,它基本上拥有ISessionFactory - 然后有这样的方法:

    public T WrapQueryInTransaction<T>(Func<ISession, T> query)
    {
        using (var tx = Session.BeginTransaction())
        {
            try
            {
                var result = query(Session);
                tx.Commit();
                return result;
            }
        }
    }

然后,我有类似的常用功能方法 - 即。 xxxUpdaters基本上加载有问题的对象,进行更新,然后再次关闭ISession。

然后查询的用法如下:

var entities = _sessionHelper.WrapQueryInTransaction(s => s.QueryOver<SomeEntity>().List());

对于复杂查询,我将这些封装在查询类中,也可以在sessionHelper中抛出。

它对我有用 - 希望你能用它。