我有两个表:所有者和客户,它们具有1对多的关联。试图微调我的实体学习,我遇到了障碍。整整一天,没有任何运气,我试过推理这两个相似的代码行返回不同的值:
仅用于测试目的,我正在尝试为每个所有者提供客户总数。 Owners实体具有一个Clients导航,返回一组Client对象。我希望结果包括Owners实体,其中包括Clients实体。
我想知道为什么返回客户总数的这三种方式是不同的。第一个和第二个返回零客户端,第三个返回正确的客户端总数。
返回零客户端:
Owner owner = context.Owners.First(o => o.ownerID == 5);
var clients = owner.Clients.Count();
-
Owner owner = context.Owners.Where(o => o.ownerID == 5).FirstOrDefault();
var clients = owner.Clients.Count();
返回正确的计数
var clients = context.Owners.Where(o => o.ownerID == 5).Select(o => o.Clients.Count()).FirstOrDefault();
我希望找到解释为何事情如此不同的原因。
谢谢
答案 0 :(得分:0)
正如Pawel所说,这必须与延迟加载有关。缺席,即。我假设您的Owner
类创建了自己的Clients
集合(我认为在其构造函数中),否则它将为null。
现在,如果您将Clients
集合定义为虚拟(假设您首先使用代码),那么当您解决owner.Clients.Count()
时,EF将能够延迟加载它。