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

Posted

技术标签:

【中文标题】没有存储库的建议数据访问模式【英文标题】:Advice data acces pattern without repository 【发布时间】:2013-08-10 06:25:02 【问题描述】:

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

有没有什么有效的方式从服务层访问ISession?

【问题讨论】:

【参考方案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 中抛出。

它对我有用 - 希望你可以使用它。

【讨论】:

以上是关于没有存储库的建议数据访问模式的主要内容,如果未能解决你的问题,请参考以下文章

设计数据访问层

是否有在基于 DDD 的分层架构中的模型和数据访问层之间使用 LINQ 的建议模式

访问模板类的非模板库的静态数据

为 .NET 数据访问层使用 MySql 存储过程

Windows:如何获得已打开文件的模式/访问权限?

数据访问模式类似于存储库但不完全