Here are my tips for working with navigation properties in Entity Framework Core.
Tip 1: Initialize collections
class Post
{
public int Id { get; set; }
// Initialize to prevent NullReferenceException
public ICollection<Comment> Comments { get; } = new List<Comment>();
}
class Comment
{
public int Id { get; set; }
public string User { get; set; }
public int PostId { get; set; }
public Post Post { get; set; }
}
Tip 2: Build using the HasOne
and WithMany
or HasMany
and WithOne
methods
protected override void OnModelCreating(ModelBuilder model)
{
model.Entity<Post>()
.HasMany(p => p.Comments).WithOne(c => c.Post)
.HasForeignKey(c => c.PostId);
}
Tip 3: Eagerly load the collection
var posts = db.Posts.Include(p => p.Comments);
Tip 4: Explicitly load if you didn't eagerly
db.Comments.Where(c => c.PostId == post.Id).Load();
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…