存储库模式与简单的选择存储过程

时间:2012-01-10 08:27:07

标签: asp.net entity-framework repository-pattern

我使用以下通用接口实现了存储库模式。

 public interface IRepository<T> where T : class
    {
        IQueryable<T> All { get; }
        IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties);
        T Find(int id);
        void InsertOrUpdate(T updateObject);
        void Delete(int id);
        void Save();
    }
然后,我创建了各个存储库,并从我的服务层调用它们。

我的数据库中有一个表,其中填充了我们的一个数据源运行的最后日期(它只包含一个记录)。我需要做的就是从数据库中获取此日期。有什么好办法呢?当然,为这个简单的只读表创建一个存储库是否有点过分?我应该在数据库中创建一个函数或存储过程以返回此日期,如果我这样做,它将如何适应存储库模式?

2 个答案:

答案 0 :(得分:1)

你不应该继承一般IRepository<T>接口,因为大多数这些方法都没有任何意义。

但是既然你已经声明可以使用存储过程,LINQ查询甚至esql,那么封装数据检索仍然是一个好主意。如果要更改机制或应用某些缓存该怎么办?

另外考虑一下单元测试,你的代码依赖于这个“最后日期”,所以在你的单元测试中你希望能够提供不同的日期。可模拟的存储库将是最简单的。

也许您可以将LastModificationDate添加为ObjectContext的功能。然后,您拥有单一访问点,在FakeObjectContext中,您可以返回特定日期以进行测试。

答案 1 :(得分:1)

如果您可以将抽象用于存储库定义而不是接口,则可以将日期代码直接添加到抽象中,并使其由所有存储库继承。