加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

C#-EF v1的加载行为?

发布时间:2021-01-25 20:46:19 所属栏目:MySql教程 来源:网络整理
导读:我提出的另一个实体框架(ADO.NET)问题. 我正在使用EF1(那里没有选择),并且有一个MySQL数据库作为后端. 一个简单的问题我真的找不到令人满意的答案: 加载到底需要做什么? IE.,当我有一个实体并想通过其子对象枚举时,说我有一个实体“ Group”,并且它有一

我提出的另一个实体框架(ADO.NET)问题.
我正在使用EF1(那里没有选择),并且有一个MySQL数据库作为后端.

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

加载到底需要做什么? IE.,当我有一个实体并想通过其子对象枚举时,说我有一个实体“ Group”,并且它有一个子代“ User”,我想从g.Users中的n中进行“ n.UserID = 4选择n“,我首先要调用g.Users.Load();

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

我不得不处理加载的另一种情况:
我有一个查询:

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

由于某些原因,即使正确设置了n.GroupID(组的键),它也无法为n.Group提供空指针.同样,当我之前做Server.Groups.Load()(组是一台服务器的子级)时,它也可以工作.

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

再次感谢你,
麦可 最佳答案 在第一个版本的实体框架中没有延迟加载.每当您要访问以前未加载的内容时,无论是对单个对象还是对象集合的引用,都必须明确地告诉它加载该引用. Include()选项(来自上面Rup的第一个选项)将尝试在一个大型查询和处理调用中加载所需的所有数据,结果是Include()执行缓慢.另一种方法(上面的Rup中的第二种方法),检查然后加载卸载的引用,执行速度更快,并且使我们能够将加载限制到所需的范围.

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

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读