0

我有两个表:所有者和客户,它们具有一对多的关联。试图微调我的实体学习,我遇到了障碍。一整天,没有任何运气,我尝试通过这两条相似的代码行返回不同的值进行推理:

仅用于测试目的,我正在尝试将每个所有者的客户总数。Owners 实体有一个返回 Client 对象集合的 Clients 导航。我希望结果包括 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();

我希望找到一个解释为什么事情如此不同。

谢谢

4

1 回答 1

0

正如 Pawel 所说,这一定与延迟加载有关。缺席,就是。我假设您的Owner类创建了自己的Clients集合(我认为在其构造函数中),否则它将为空。

现在,如果您将Clients集合定义为虚拟的(假设您首先使用代码),EF 将能够在您寻址时延迟加载它owner.Clients.Count()

于 2012-10-21T11:01:57.420 回答