接收不正确的实体结果

时间:2012-10-18 02:12:47

标签: c#-4.0 entity-framework-4 lambda entity

我有两个表:所有者和客户,它们具有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();

我希望找到解释为何事情如此不同的原因。

谢谢

1 个答案:

答案 0 :(得分:0)

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

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