kry*_*pru 6 c# linq asp.net-mvc entity-framework
正如主题所说,我想知道什么是更快更好的方法。
Linq 和存储库中的新方法,如 GetCourts(int ClubId)
var courts =_context.Courts.Where(c=>c.ClubId==clubId)
Run Code Online (Sandbox Code Playgroud)
或者使用 EF 延迟加载
var courts= _clubRepository.GetClub(clubId).Courts;
Run Code Online (Sandbox Code Playgroud)
我的俱乐部实体:
public class Club :EntityBase
{
public string Name { get; set; }
public virtual IList<Court> Courts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的法院实体:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我不知道在我的项目中使用什么方法。
在您在问题中描述的用例中,使用 LINQ 查询比使用延迟加载要快得多。
这个说法:
var courts= _clubRepository.GetClub(clubId).Courts;
Run Code Online (Sandbox Code Playgroud)
等价于这些语句:
var club = _clubRepository.GetClub(clubId);
var courts = club.Courts;
Run Code Online (Sandbox Code Playgroud)
第一行导致发出 SQL 查询以获取带有 的单个俱乐部ClubId == clubId。第二行导致发出另一个 SQL 查询来获取所有带有 的法院ClubId == clubId。您进行两个查询的事实将压倒延迟加载使用sp_executesql.
另一方面,
var courts =_context.Courts.Where(c=>c.ClubId==clubId)
Run Code Online (Sandbox Code Playgroud)
将会导致只发出一个 SQL 查询,这会更加高效。
当然,如果Club内存中已经有一个实例,则应该使用延迟加载来获取其相关实体,这既是为了提高效率,也是为了保持对象图的一致性。