要做到这一点,你Blog
应该有外键到Posts
像:
public class Blog
{
public int Id { get; set; }
public string Title { get; set; }
public int LatestPostId? { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public virtual Post LatestPost { get; set; }
}
内。然后OnModelCreating
方法,你可以映射它喜欢:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.HasOptional(m => m.LatestPost)
.WithMany()
.HasForeignKey(m => m.LatestPostId);
}
但我建议装载LatestPost
时你需要它:
Post latestPost = myContext.Posts
.Where(m => m.BlogId == blogId)
.OrderByDescending(m => m.CreatedDate)
.FirstOrDefault();
此外,您可以让LatestPost
没有映射和配置它从数据库加载数据:
public class Blog
{
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<Post> Posts { get; set; }
public virtual Post LatestPost
{
get
{
return Posts
.OrderByDescending(m => m.CreatedDate)
.FirstOrDefault();
}
}
}
不要忘记忽略LatestPost
在OnModelCreating
:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Ignore(m => m.LatestPost);
}
此外,您可以通过添加忽略此属性NotMapped
属性:
public class Blog
{
....
[NotMapped]
public virtual Post LatestPost
.....
}
好回答。我虽然只是在需要的时候加载它,但由于某种原因,我的头说这是不好的做法......谢谢你的答案。 – Detilium
@Detilium,我很高兴它有帮助 –