首页 > 解决方案 > 如何在使用存储库模式时从 EF 查询返回单个列

问题描述

我的应用程序的数据访问层由实体框架和存储库模式*组成。使用实体框架日志记录,我发现了一些查询,它们带回了实体的所有列(当然,回想起来查看 ef 查询时显然是这种情况)。很多低效率和性能问题。

通过修改查询来解决这个问题很简单,但我不知道如何将存储库中的结果传递回应用程序。

我的回答可能是在上述其中一项上妥协。但我想先问问社区。

*我知道将存储库模式与 ORM 一起使用是一个非常有争议的话题,但我真的想远离这场争论。我继承了这个应用程序,因此船舶在应用程序架构方面已经航行。我只需要一个实用的解决方案,我可以在我必须接受的任何妥协的情况下与我现有的架构一起实施。

标签: .netentity-frameworkrepository-patterndata-access

解决方案


传递一个 IQueryable 打破了我对分离的所有看法

正确的答案。存储库不必知道应用程序可能需要的每个可能的查询。将所有查询逻辑放在存储库中实际上打破了存储库与应用程序其他部分之间的职责分离。

传递一个强类型对象...从存储库层它需要我的存储库层“了解”其他一些项目

DTO 是应用程序组件之间“契约”的一部分。所有应用程序组件都必须和适当地共享对服务契约的引用,包括 .NET 接口定义和传入和传出接口方法的数据类型。


推荐阅读