c# - EF v1 的加载行为?

标签 c# sql mysql entity-framework

我提出的另一个 Entity Framework (ADO.NET) 问题。 我正在使用 EF1(别无选择)并使用 MySQL 数据库作为后端。

一个简单的问题,我真的找不到令人满意的答案:

加载时我究竟需要做什么? IE.,当我有一个实体并想通过它的子项进行枚举时,说我有实体“Group”并且它有一个子项“User”,我想做“from n in g.Users where n.UserID = 4 选择n",我首先要调用g.Users.Load();

这有点烦人,因为当我针对未加载的集合执行查询时,我希望 EF 自动加载它 - 至少抛出一些异常,而不是简单地返回 0 个结果?

另一种情况是我必须负责加载: 我有一个问题:

from n in Users where n.Group.Name == "bla" select n

由于某种原因,它失败了,为 n.Group 提供了一个空指针,即使 n.GroupID(组的键)已正确设置。此外,当我之前执行 Server.Groups.Load() (组是一个服务器的子级)时,它有效。

是否有关于何时调用哪个集合的 Load() 的确切策略?

再次感谢, 迈克尔

最佳答案

第一版 Entity Framework 没有延迟加载。任何时候你想访问你以前没有加载的东西,无论是对单个对象的引用还是对象集合,你都必须明确地告诉它加载该引用。 Include() 选项(首先来自上面的 Rup)将尝试在一个大型查询和处理调用中加载您想要的所有数据,结果是 Include() 执行缓慢。另一种方法(上面 Rup 中的第 2 种方法)检查​​然后加载卸载的引用,执行速度更快,并允许我们将负载限制在我们需要的范围内。

基本上,我们的政策是只加载您在初始查询中必须加载的内容,从而最大限度地减少对性能的影响。然后,当我们想要访问引用的实体或实体集合时,我们将检查并加载引用。这导致对数据库的查询更多,但它们更快,而且我们只在需要时加载辅助数据,而不是预加载我们可能需要的所有数据。同一个属性可能会在一个函数中被检查几次,但它只会被加载一次,我们可以确定我们加载它只是因为我们正在使用它。

关于c# - EF v1 的加载行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3555033/

相关文章:

php - 阻止表更新查询 20 秒。可能的?

sql - 具有相同参数的多个数据库查询的联合

sql - 'scale'这三个表怎么办?

c# - 为什么要使用只有一个参数的 string.Format 呢?

java - 如何使用java实现aiml

c# - 我能以某种方式在 java android 项目中使用 C# 代码或 C# 库吗?

'/'时MYSQL自动将字符串转为date

c# - MVVM 中的 DataGridComboBoxColumn SelectionChanged 事件

php - 如何从数据库mysql中选择待处理的好友请求

php - 使用 JSON 的 AJAX 上传图像不起作用