在博客圈中似乎有一个共同的共识,即实体框架4的一个重要特性是能够在通用ObjectSet之上创建通用存储库。通用存储库的示例实现基本上是围绕ObjectSet的包装器,它简单地转换方法调用。没有任何有意义的逻辑。经过一番思考后我才开始问自己:通用存储库给我的好处是,ObjectSet本身还没有提供什么? ObjectSet具有所有必需的功能(CRUD)。由于它实现了IEnumerable(甚至IQueryable),它提供了所有Linq扩展,使得很容易准确地指定您想要的数据。通过一些IRepository绕道而行是什么原因,而不是直接使用IObjectSet作为我的数据访问层接口?
谢谢和问候,
彼得。
答案 0 :(得分:0)
实现存储库模式的原因是使自动化单元测试的模拟数据源更容易。
如果模型上下文实现了一个接口(比如说IRepository),并且你的业务逻辑类允许通过构造函数传递IRepository对象(依赖注入),单元测试可以创建自己的IRepository数据对象并将它们传递给单元测试。这意味着您可以在没有数据库支持的情况下进行单元测试,这比对外部数据库的测试更简单,更可靠。