【问题标题】:Possible to use the Repository Pattern + Stored Procedures ? Should / can they return IQueryable?可以使用存储库模式 + 存储过程吗?他们应该/可以返回 IQueryable 吗?
【发布时间】:2010-08-02 07:00:31
【问题描述】:

我非常喜欢使用 Repository pattern 返回 IQueryable<T> 对象。然后我让我的服务层确定做什么(例如,按 XXX 过滤,按 YYY 排序,投影到 ABCD 等)。

但是我有一些核心数据库的东西,所以我把它们都打包到了Stored Procedure 中。工作正常。我知道 EF 可以执行存储过程 .. 但我不确定这如何适合存储库模式数据层。

有没有人有任何例子/建议?我是否让存储库方法执行存储过程,然后返回结果(例如ICollection<Foo> as AsQueryable .. 那么服务层只查询该结果?

【问题讨论】:

    标签: .net entity-framework stored-procedures entity-framework-4 repository-pattern


    【解决方案1】:

    我建议继续这样做。在 EF 模型中设置存储过程,返回它需要的任何实体,然后在您的存储库中创建一个 get 来解决存储过程正在使用的内容。数据返回方式的差异发生在 DAL(在本例中为 EF 模型)内部,您的存储库仍在访问上下文以查找和返回数据。

    我现在正在做类似的事情,这是我能想到的最佳解决方案。它允许我继续在 EF 模型上进行数据访问,并将我的存储库与模型收集数据的方式分开。存储库仍然对模型如何获取数据一无所知,并且应用程序的其余部分不会发现存储库功能有任何不同。

    【讨论】:

    • 我们使用 DI 将 Context 传递给构造函数上的存储库时执行相同的操作。理想情况下,我们只想传递存储库负责的类型的 ObjectSet,但很快意识到我们只能访问上下文之外的函数导入。
    • 如果你的存储过程需要参数怎么办?那么你的“get”签名是什么样子的呢?
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2019-05-01
    • 2011-01-21
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多