什么是更好/更快或更安全.包括()或单独获取实体?



我有一个实体项目,然后我有一个实体票,有一个projectId。在for Details页面之前,我找到了项目

public async Task<Project> FindByIdAsync(int id)
{
return await _db.Projects
.Include(p => p.ApplicationUsers)
.FirstOrDefaultAsync(p => p.Id == id);
}

然后通过projectId

找到票
public async Task<ICollection<Ticket>> GetAllTicketsForProject(int projectId)
{
return await _db.Tickets
.Where(t => t.ProjectId == projectId)
.Include(t => t.AssignedUser)
.Include(t=>t.Project)
.OrderBy(t=> t.DateCreated)
.ToListAsync();
}

当删除票据时,我发现了级联删除,我可以只做

public IList<Comment> Comments { get; set; } = new List<Comment>();

,现在我可以在查询中包含所有的评论。这对我来说是全新的体验。现在我想知道什么是更好的做法?要在查询上使用Include还是单独获取实体?

在这种情况下,最好将Tickets实体包含在Projects查询中。当然,你在数据库上投入了更多的工作,但这就是DB和JOIN的强大之处。

按照目前的情况,您将对数据库进行两次往返,并且,通过在查询中包含子实体,您很可能会看到性能的提高。

在那里你会真的有麻烦,不使用.Include()正确地获取实体的集合,然后通过这些实体循环,并试图访问一个导航属性的实体,还没有被获取;著名的n+1问题

最新更新