为什么使用 EF 实现的存储库应该公开 IQueryable 而不是 ObjectQuery



>链接:

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

a) 我认为存储库(使用 EF

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

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

谢谢

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

var resultsINeed = getQueryable()。其中(表达式 1)。选择(表达式 2);

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

相关内容

  • 没有找到相关文章

最新更新