越来越多地为我的应用程序编写SQL,我决定尝试实体框架。但是,我遇到了一些我认为导致我编写的代码超出我认为绝对必要的代码。
当我访问某些导航属性时,我发现所有多对一关系(简单引用)都为null,并且所有一对多和多对多关系(EntityCollections)都是空的。
例如:我有一个用户引用了一个组。当我通过使用简单的id-select-id取消用户后,Group属性为null。如果我想访问该组,我必须手动加载它(使用User.GroupReference.Load())。所以我在User中添加了一个GetGroup()方法,用于检查是否已经加载了Group,如果没有,则检查是否已经加载,然后返回Group。
现在,这将为所有导航属性带来许多高度相似的方法。这一切导致导航属性没有被使用,现在只使用我自定义的Get“PropertyName”()方法。
我不想扩展我的查询(linq到实体)以立即加载所有这些属性,因为它并不总是一开始就知道需要什么。此外,它还会导致很多疑问。
有没有办法配置实体框架,以便在它们碰巧不存在时加载这些对象?因此,当我访问User.Group并且尚未加载组时,它会自动加载?或者我只是在尝试按需加载对象(或“即时”)时使用我自己的Get“PropertyName”()方法?
一些额外信息:我正在使用VS2008 SP1和.NET 3.5 SP1。我正在使用的实体框架随附了它。
答案 0 :(得分:1)
您可以获得EFLazyLoading
- 这将通过替换代码生成器为实体框架添加透明的延迟加载支持。
Entity Framework 1.0中没有对透明延迟加载的内置支持 - 仅使用Include()
进行预先加载,使用Load()
进行手动延迟加载。我不确定实体框架2.0,但如果没有内置支持,由于使用T4代码生成,它至少应该比以前更容易添加。