延迟加载只对关联属性(Navigation Property)有用,普通属性没有这个东西。数据库
延迟加载是一条一条的读取属性,调用一次,读取一次。服务器
条件:ide
context.Configuration.ProxyCreationEnabled = true;(默认为true)spa
context.Configuration.LazyLoadingEnabled = true;(默认为true)io
POCO类为public,导航属性要加virtual修饰符。原理
注:POCO---Plain Old CLR Object,指那些不包括INSERT、DEL等数据持久化操做及任何业务逻辑的原始类。数据
原理分析:di
EF动态的生成了实体类的子类,而后override了virtual属性(因此不加virtual的话就得不到属性值)vi
优势:避免一次性加载全部数据,提升了加载的速度。co
缺点:用一次加载一次,提升了数据库服务器的压力。
因此,当数据库的数据越多,咱们用到的数据越少时,推荐使用延迟加载,反之使用预先加载。