例如说我有(伪代码):业务逻辑层中的AsQueryable() - 不好的做法? (我是这么认为的,但....)
在我的数据访问层到实体框架,这在目前返回,从而保证了我的生意才做了.ToList()
public IEnumerable<User> GetUsers(string name)
逻辑层不能干扰我的数据访问层。
但是,在我的业务逻辑层中,我需要稍微不同的变体,例如我需要更少的数据(例如只是userid或进一步过滤它)。
要有一个高效的数据库层,我希望另一个方法返回数据的一个子集(重载方法或其他)。但是,我可以“欺骗”并省略ToList(),并且我的业务逻辑层在最后加上了一个AsQueryable()。因此,我的业务逻辑层能够操纵创建的底层sql。
什么是人们对业务逻辑层中AsQueryable()的想法?在我看来,这是对我的数据访问层的抽象抽象,但它可能非常方便,也许是因为它位于LINQ命名空间(而不是EF命名空间)中,它并不是很糟糕的用法?
编辑
东西(对省略ToList()和参数)有用的注意的是,如果代码调用它以前依靠ToList()数据绑定,即避免错误“数据直接绑定到商店查询(DbSet,DbQuery,DbSqlQuery)不受支持。”你不会得到编译时错误,只是运行时错误。所以你需要确保ToList()在UI层之前肯定被调用。
我通常采用的规则,实体框架*是*我的数据层 - 我没有一个单独的DAL的顶部。我注意到[StackOverflow同意](http://blog.stackoverflow.com/2008/09/what-was-stack-overflow-built-with/)(尽管使用Linq-to-SQL)! – 2013-02-27 10:27:15
您是否在使用存储库模式? – Jehof 2013-02-27 10:27:47
好问题,是的,我们正在使用存储库模式来执行我们的多租户过滤。 – 2013-02-27 10:30:36