实体框架加载

Posted

技术标签:

【中文标题】实体框架加载【英文标题】:Entity Framework Loading 【发布时间】:2011-10-22 08:58:52 【问题描述】:

我正在使用 Entity Framework 4.1 (Code First) 作为 O/R 映射框架:

我有三个实体:Post、PostForUser 和 User,而 PostForUser 只与一个 Post 和一个用户相关联。

现在我想获取给定用户的所有帖子,并另外加载创建帖子的用户:

var posts = _dbContext.PostsForUser
    .Include("Post.ByUser")
    .Where(x => x.WasRead == false && x.User.Id == CurrentUser.Id)
    .Select(x => x.Post)
    .ToArray();

使用上面的查询,永远不会加载“ByUser”属性。我根本没有使用延迟加载,但我仍然无法正常加载。

没有注册任何自定义映射配置或特殊约定。仅以下实体定义:

public class Post

    public int Id  get; set;         
    public string Content  get; set; 
    public DateTime Date  get; set; 
    public User ByUser  get; set; 


public class PostForUser

    public int Id  get; set; 
    public User User  get; set; 
    public Post Post  get; set; 
    public bool WasRead  get; set; 

【问题讨论】:

【参考方案1】:

您的包含.Include("Post.ByUser") 适用于PostForUser,但您选择的是Post,因此包含应该转到选择的和:

var posts = _dbContext.PostsForUser
            .Where(x => x.WasRead == false && x.User.Id == CurrentUser.Id)
            .Select(x => x.Post).Include("ByUser")
            .ToArray();

【讨论】:

谢谢,这解决了我的问题。你知道哪些导航属性会自动加载而不需要使用“Include”子句吗?

以上是关于实体框架加载的主要内容,如果未能解决你的问题,请参考以下文章

实体框架加载

为啥实体框架核心加载实体的关系而不添加包含

从实体框架中的集合加载相关实体

实体框架急切加载不返回数据,延迟加载有

实体框架 - 停止按需延迟加载相关实体?

实体框架查询——加载数据优化