【问题标题】:Why should repositories implemented using EF expose IQueryable rather than ObjectQuery?为什么使用 EF 实现的存储库应该公开 IQueryable 而不是 ObjectQuery?
【发布时间】:2013-10-14 09:05:18
【问题描述】:

Link:

我的存储库总是返回 IQueryable。这样做的原因是 IQueryable 不依赖于 EF,而 ObjectQuery 是。所以如果我想要 我的其他层对持久性一无所知我不想介绍 对 ObjectQuery 的依赖。

a) 我假设存储库(使用 EF 实现)应该返回 IQueryable 而不是 ObjectQuery 的原因是因为其他 ORM 也使用返回 IQueryable 的查询,并且通过让存储库返回 IQueryable 我们可以轻松切换在 EF 和其他 ORM 之间,无需更改存储库的公共接口?

b) 除了 EF 和 NHibernate,还有其他 ORM 也有返回 IQueryable 的查询吗?

谢谢

【问题讨论】:

标签: entity-framework linq-to-entities iqueryable objectquery


【解决方案1】:

您应该返回 IQueryable,因为这是表达式树的通用语言。如果它不是 IQueryable,它要么是理解 Expression 的其他东西,要么是某种可怕的自定义语言,它给你的编程体验非常差

var resultsINeed = getQueryable().Where(expression1).Select(expression2);

如果它理解了这里的 Expression 示例,那么它也可能只是 IQueryable,因为这就是 IQueryable 的全部 - 作为一般抽象,每个人都可以在他们的接口中重用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多