【问题标题】: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; }
}

【问题讨论】:

    标签: entity-framework entity-framework-4.1


    【解决方案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”子句吗?
    猜你喜欢
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多