【问题标题】:Receiving Incorrect Entity Results接收不正确的实体结果
【发布时间】:2012-10-21 19:01:57
【问题描述】:

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

仅用于测试目的,我正在尝试计算每位所有者的客户总数。 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();

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

谢谢

【问题讨论】:

  • 是否启用了延迟加载?似乎它可能不是。在这种情况下,您可能希望使用 .Include 来急切地加载实体。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多