繁体   English   中英

延迟加载实体框架

[英]Lazy loading Entity framework

我从数据库优先方法开始,它在员工和部门之间具有多对一的关系。 实体框架创建了两个部分类:具有Employee集合的Department和具有单个对象Department Employee

如果我添加了virtual那么Department将加载相关的员工。 两个类之间没有继承关系。 都是TPT。

我得到这个链接

延迟加载是通过创建派生代理类型的实例,然后重写虚拟属性以添加加载挂钩来实现的。

那怎么回事呢? Department不是Employee的父母。

实体框架导航属性的工作方式有所不同,具体取决于您使用数据库优先还是代码优先的方法。 这是您发布的链接的扩展摘录:

使用POCO实体类型时 ,通过创建派生代理类型的实例,然后重写虚拟属性以添加加载钩子,可以实现延迟加载。

“ POCO”的意思是“普通的旧CLR对象”,这是您将以代码优先方式创建的类。 由于这些类不具备EF的任何固有知识,因此必须以EF代理可以正确连接它们的方式定义属性。

由于您使用数据库优先,因此这些类不是“ POCO”。 它们从实体框架基类继承,该基类连接了导航属性以进行延迟加载。

您似乎对代理如何执行此操作感到困惑。

因此,当您获得的Department 。实例加载了employee.Department属性时,实例employee的类型不是Employee而是EF生成并继承自Employee类的proxy class类。 允许代理类型覆盖Employee类中的Department属性,并且该属性的get方法触发数据库查询以将Department实例加载到内存中。

但是,您也可以禁用代理创建的行为。

DbContext.Configuration.ProxyCreationEnabled = false;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM