gpt4 book ai didi

c# - 延迟加载或 linq 查询?

转载 作者:太空狗 更新时间:2023-10-30 00:40:40 26 4
gpt4 key购买 nike

正如主题所说,我想知道什么是更快更好的方法。

存储库中的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com