Mel*_*sus 4 .net entity-framework repository
我得到了以下2个实体:User和Post
简单版用户:
public virtual int Id { get; set; }
public virtual IList<Post> Posts { get; set; }
Run Code Online (Sandbox Code Playgroud)
邮件默认不加载.
在某些情况下,我需要加载帖子(例如,我想计算该用户的帖子数量).现在,我在UserRepository中添加了一个方法调用LoadPosts(用户用户):
_context.LoadProperty(user, "Posts");
Run Code Online (Sandbox Code Playgroud)
Load(bool loadPosts)有没有办法,如果我写myUser.Posts.Count()帖子是自动加载而不是null?
您描述的场景称为延迟加载,EF4支持它.根据您的代码判断,您有POCO对象,并且由于您已将列表声明为virtual,因此EF可以创建代理以提供延迟加载功能.您可以使用一个设置来启用延迟加载:context.ContextOptions.LazyLoadingEnabled = true;.在这种情况下,无论何时访问Posts已加载的属性User,数据都将从DB加载.
更多信息,请参阅"延迟/延迟加载"部分:http: //blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-复杂类型递延装载和显式-loading.aspx
这样做的原因是因为当我将我的集合属性标记为虚拟时,这允许实体框架在运行时为我的POCO类型提供代理实例,并且正是此代理执行自动延迟加载.代理实例基于从我自己的POCO实体类派生的类型 - 因此保留了您提供的所有功能.从开发人员的角度来看,这允许您编写持久性无知代码,即使可能需要延迟加载.
简要介绍一下您的小问题列表:
Posts自己加载给定用户,那么它在逻辑上属于
UserRepository.PostsRepository您加载与特定用户无关的帖子(例如,所有帖子中的全局关键字搜索).