存储库模式只能与实体框架一起使用

本文关键字:框架 一起 实体 模式 存储 | 更新日期: 2023-09-27 18:08:24

我使用Entity Frameworkrepository pattern已经有一段时间了。

前几天我被要求在不使用实体框架的情况下写一个数据层,只是普通的旧ADO.NET。我想知道最好的方法是什么?我是否也使用存储库模式来使用普通的ADO.NET进行CRUD操作?

如果我去Codeplex并搜索存储库模式,那么99.9%的示例项目使用实体框架。是否有一个不同的模式,需要使用,如果我使用普通ADO。. NET与存储过程?

存储库模式只能与实体框架一起使用

不,存储库模式在实体框架之外广泛使用,并且是处理数据访问的一种全面有用的方式。

从MSDN

  • 集中数据逻辑或Web服务访问逻辑。
  • 为单元测试提供了一个替换点。
  • 它提供了一个灵活的架构,可以随着应用程序整体设计的发展而调整。
http://msdn.microsoft.com/en-us/library/ff649690.aspx

其他好处:

  • 在存储库中添加逻辑很简单,例如通过web请求缓存结果
  • 可添加常用查询,如userRepository.FindByEmailAddress(emailAddress);
  • 存储库可以与其他存储库一起更改,例如将数据库切换到web服务,只需最少的努力

我认为这不是正确的方式。但是有一些假设

在EF代码之上添加一个存储库模式。这将使您与ORM的特性保持距离。实体框架已经是数据库之上的抽象层。

如果你想在EF上使用依赖注入和测试驱动开发,那么你要遵循存储库模式。通过使用RP,您的代码变得可测试和可注入/可维护。

开箱即用的EF不是很容易测试的,但是用一个可以注入的接口创建一个可模拟的EF数据上下文版本是很容易的。

如果我们不希望我们的代码是可测试的或可注入的,那么就不要使用RP。

我看到一篇博客文章:http://www.nogginbox.co.uk/blog/do-we-need-the-repository-pattern

Martin Fowler的"Patterns of Enterprise Architecture",为存储库提供了以下定义:

使用类似集合的接口来访问域对象,在域层和数据映射层之间进行中介。

在c#中实现它的一种常见方法是有一个泛型Repository<T>类,其中T是一个持久对象,实现IQueryable<T>并提供Add(entity), Remove(entity)等附加方法。

如果没有ORM,将很难实现。您可以创建一个更简单的存储库,将SQL语句作为WHERE条件,但它可能会变得混乱。

许多例子使用具体的存储库类为每种类型提供不同的持久性方法。但这些只是伪装的DAO类。