【问题标题】:Repository pattern with simple select stored procedure具有简单选择存储过程的存储库模式
【发布时间】:2012-01-10 08:27:07
【问题描述】:

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

 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();
    }

然后我创建单独的存储库并从我的服务层调用它们。

我的数据库中有一个表,其中填充了我们的一个数据馈送运行的最后日期(它只会包含一条记录)。我需要做的就是从数据库中获取这个日期。有什么好方法可以做到这一点?为这个简单的只读表创建一个存储库肯定是大材小用吗?我应该在数据库中创建一个函数或存储过程来返回这个日期吗?如果我这样做,它将如何适应存储库模式?

【问题讨论】:

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


    【解决方案1】:

    您不应该从通用的IRepository&lt;T&gt; 接口继承,因为大多数这些方法没有任何意义。

    但是由于您已经声明可以使用存储过程、LINQ 查询甚至 esql,因此封装数据检索仍然是一个好主意。如果你想改变机制或应用一些缓存怎么办?

    还要考虑单元测试,您的代码取决于这个“最后日期”,因此在您的单元测试中,您希望能够提供不同的日期。一个可模拟的存储库将是最简单的。

    也许您可以将LastModificationDate 作为函数添加到您的ObjectContext。然后,您可以进行单点访问,并在 FakeObjectContext 中返回特定日期以进行测试。

    【讨论】:

    • 因此您建议为其创建一个不继承现有接口的存储库。我将为从数据库中提取的所有应用程序范围的只读数据创建一个单独的接口和存储库。谢谢
    • @woggles 您可以为所有“杂项数据”创建一个单独的存储库,或者您可以将一个“杂项数据”对象添加到您的 Context 中,该对象是延迟加载的,并为您想要的每个值赋予一个属性检索
    【解决方案2】:

    如果您可以将摘要用于存储库定义而不是接口,则可以将日期代码直接添加到摘要中,并让所有存储库继承它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多