Arr*_*rrr 63 c# entity-framework entity-framework-6
实体框架中的延迟加载是加载和访问相关实体时发生的默认现象.然而,急切加载是指强制加载所有这些关系的做法.我遇到的问题是,在什么情况下,急切加载可能比延迟加载更有益.问这个,因为很明显延迟加载更加资源友好,即使我们使用这个ToList()
方法,我们仍然可以利用延迟加载行为.但是,我认为可能延迟加载会增加对实际数据库的请求数量,这也许是开发人员使用该Inlcude
方法强制加载所有关系的原因.例如,在MVC 5中使用Visual Studio自动搭建时,在控制器中自动创建的Index方法总是使用Eager Loading,而且我总是有一个问题,即在这种情况下Microsoft默认使用Eager Loading.
如果有人向我解释,在什么情况下,渴望加载比延迟加载更有益,我会很感激,为什么我们一直使用它,同时有更多的资源友好作为延迟加载.
far*_*ran 64
我认为对这样的关系进行分类是件好事
何时使用急切加载
何时使用延迟加载
注意:像Transcendent一样,延迟加载可能存在处理问题.
Dar*_*ter 19
渴望加载: 预先加载可帮助您一次加载所有需要的实体.即相关对象(子对象)与其父对象一起自动加载.
何时使用:
延迟加载: 在延迟加载的情况下,相关对象(子对象)在其请求之前不会自动加载其父对象.默认情况下,LINQ支持延迟加载.
何时使用:
注意:实体框架支持三种加载相关数据的方法 - 急切加载,延迟加载和显式加载.
ser*_*iyb 16
延迟加载将产生多个SQL调用,而Eager加载可能会加载一个"更重"调用(带有连接/子查询)的数据.
例如,如果您的Web和SQL服务器之间存在高ping,您将使用Eager加载而不是使用延迟加载逐个加载相关项.
Tra*_*ent 11
考虑以下情况
public class Person{
public String Name{get; set;}
public String Email {get; set;}
public virtual Employer employer {get; set;}
}
public List<EF.Person> GetPerson(){
using(EF.DbEntities db = new EF.DbEntities()){
return db.Person.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
现在调用此方法后,您不能再延迟加载Employer
实体了.为什么?因为db
物体被处理掉了 所以你必须 Person.Include(x=> x.employer)
强制加载它.
延迟加载- 在处理分页时非常有用,例如页面加载用户列表中出现的内容包含 10 个用户,当用户向下滚动页面时,API 调用会带来接下来的 10 个用户。当您不想一次加载整个数据时,这很好,因为这会花费更多时间并且会带来糟糕的用户体验。
预加载- 正如其他人建议的那样,当关系不多并且在对数据库的单次调用中一次获取整个数据时,这是很好的选择
急切加载 当您确定要一次获取多个实体时(例如,必须在同一页面上显示用户和用户详细信息),则应该进行急切加载。急切的加载使数据库命中一次,并加载了相关的实体。
延迟加载 当您只需要在页面上显示用户时,通过单击用户需要显示用户详细信息,则需要进行延迟加载。延迟加载会产生多次点击,以在绑定/迭代相关实体时加载相关实体。
归档时间: |
|
查看次数: |
73141 次 |
最近记录: |