entity-framework - 将 Entity Framework 实体集合从 DAL 传递到业务层的最佳方法?

标签 entity-framework generics collections object data-access-layer

我有一个 DAL,可以调用我的 Entity Framework 模型。这些调用返回诸如 IOrderedQueryable 和 IQueryable 对象之类的内容。我是否应该将它们转换为 DAL 中更通用的内容,例如 List?但我认为如果我不需要枚举整个集合,这可能会很浪费......那么最好的方法是什么?只需让 DAL 返回 IQueryable<> 并在需要时转换它?或者还有其他更灵活的办法吗? 提前致谢。

最佳答案

我也有同样的问题,但不知道完美的答案是什么。我觉得让 DAL 返回 IQueryable<> 实际上是最灵活的,因为您可以在代码的另一层轻松地执行另一个 LINQ 查询(如果需要)。

要考虑的另一件事是,当返回 IQueryable 时,结果尚未加载到内存中。所以返回的实际上是 LINQ“查询”。因此,它的行为与人们可能习惯的行为略有不同,即当从模型返回某些内容时,它实际上是来自数据库的结果。

在我的情况下,我们从 DAL 返回列表(通过调用 IQueryable<>.ToList() 创建)。如果此列表需要过滤,那么我们将创建另一个 DAL 方法来返回过滤后的列表。我们选择这样做是因为调用 DAL 的其他层不需要知道我们正在以这种方式使用 Entity Framework (不引入依赖项)。

关于entity-framework - 将 Entity Framework 实体集合从 DAL 传递到业务层的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/496108/

相关文章:

带有包含多个条件的 WHERE 子句的 LINQ 查询

entity-framework - 如何使用EF4 Fluent API将删除级联到链接表中?

java - 仅获取 ArrayList 中符合条件的第一个元素

java - 基于多连接的ArrayList排序

ruby - 在 Ruby 中是否有性能原因更喜欢大小而不是长度或计数?

c# - 如何从 ChangeTracker 获取原始实体

c# - 如何在 C# 中创建与 Mysql 的全新连接?

swift - 具有关联类型的协议(protocol)中的通用变量。漏洞?

c# - 在 C# 类中实例化泛型类型

java - 使用泛型参数的泛型类