实体框架加载
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”子句吗?以上是关于实体框架加载的主要内容,如果未能解决你的问题,请参考以下文章