.net - 如何在使用存储库模式时从 EF 查询返回单个列
问题描述
我的应用程序的数据访问层由实体框架和存储库模式*组成。使用实体框架日志记录,我发现了一些查询,它们带回了实体的所有列(当然,回想起来查看 ef 查询时显然是这种情况)。很多低效率和性能问题。
通过修改查询来解决这个问题很简单,但我不知道如何将存储库中的结果传递回应用程序。
- 传递一个 IQueryable 打破了我对分离的所有看法
- 如果我想从存储库层传递一个强类型对象(仅包含我想要的列),它需要我的存储库层“了解”包含 dto 类的其他项目(通过项目引用),这对我来说真的很恶心. 它创建了一个不应该存在的程序集依赖项。
- 你不能返回匿名类型
我的回答可能是在上述其中一项上妥协。但我想先问问社区。
*我知道将存储库模式与 ORM 一起使用是一个非常有争议的话题,但我真的想远离这场争论。我继承了这个应用程序,因此船舶在应用程序架构方面已经航行。我只需要一个实用的解决方案,我可以在我必须接受的任何妥协的情况下与我现有的架构一起实施。
解决方案
传递一个 IQueryable 打破了我对分离的所有看法
这是正确的答案。存储库不必知道应用程序可能需要的每个可能的查询。将所有查询逻辑放在存储库中实际上打破了存储库与应用程序其他部分之间的职责分离。
传递一个强类型对象...从存储库层它需要我的存储库层“了解”其他一些项目
DTO 是应用程序组件之间“契约”的一部分。所有应用程序组件都必须和适当地共享对服务契约的引用,包括 .NET 接口定义和传入和传出接口方法的数据类型。
推荐阅读
- python - 在函数中使用遗传算法(局部) - 最小化函数
- objective-c - 在Objective-C中使用精确的int字典值过滤字典的NSMutableArray
- c# - 如何在代码中设置 xaml DesignInstance 属性
- wordpress - 注意:未定义的属性:stdClass::$file_id Woocommerce
- api - 使用 Symfony 在 API 功能测试中创建模拟
- jquery - CytoscapeJS 背景颜色灰色
- python - 请求 - 无法在 JSON 正文中以 ISO 8601 格式发布日期
- java - 为什么@Sql 在 Spring 测试中不起作用?
- c# - 如何防止asp.net web表单中的跨站点请求伪造(csrf)攻击
- php - 从个人网站下载 facebook 评论