0

链接

我的存储库总是返回 IQueryable。这样做的原因是 IQueryable 不依赖于 EF 而 ObjectQuery 是。因此,如果我希望我的其他层对持久性无知,我不想引入对 ObjectQuery 的依赖。

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

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

谢谢

4

1 回答 1

0

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

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

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

于 2014-09-15T16:35:44.097 回答