ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#-EF v1的加载行为?

2019-12-09 06:24:16  阅读:330  来源: 互联网

标签:sql c mysql entity-framework


我提出的另一个实体框架(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中的第二种方法),检查然后加载卸载的引用,执行速度更快,并且使我们能够将加载限制到所需的范围.

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

标签:sql,c,mysql,entity-framework
来源: https://codeday.me/bug/20191209/2097056.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有