正如主题所说,我想知道什么是更快更好的方法。
Linq 和存储库中的新方法,如 GetCourts(int clubId)
var courts =_context.Courts.Where(c=>c.ClubId==clubId)
或者使用 EF 延迟加载
var courts= _clubRepository.GetClub(clubId).Courts;
我的俱乐部实体:
public class Club :EntityBase
{
public string Name { get; set; }
public virtual IList<Court> Courts { get; set; }
}
我的法院实体:
public class Court:EntityBase
{
public bool IsIndoor { get; set; }
public int ClubId { get; set; }
public virtual Club Club { get; set; }
public int CourtTypeId { get; set; }
public virtual CourtType CourtType { get; set; }
}
我不知道在我的项目中使用什么方法。
最佳答案
在您在问题中描述的用例中,使用 LINQ 查询将比使用延迟加载快得多。
这个说法:
var courts= _clubRepository.GetClub(clubId).Courts;
相当于这些语句:
var club = _clubRepository.GetClub(clubId);
var courts = club.Courts;
第一行导致发出 SQL 查询以获取带有
ClubId == clubId
的单个俱乐部。第二行导致发出另一个 SQL 查询以获取所有带有 ClubId == clubId
的法院。您进行两次查询的事实将抵消延迟加载使用 sp_executesql
带来的任何潜在好处。另一方面,
var courts =_context.Courts.Where(c=>c.ClubId==clubId)
将导致只发出一个 SQL 查询,这将更有效率。
当然,如果内存中已经有
Club
的实例,则应该使用延迟加载来获取其相关实体,以提高效率并保持对象图的一致性。关于c# - 延迟加载或 linq 查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25463603/