加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 实体框架 – 使用.Include()和.Select()的“eager lo

发布时间:2020-12-16 09:47:44 所属栏目:asp.Net 来源:网络整理
导读:这是我正在使用.NET 4.0在Entity Framework 5.0.0 RC(代码优先)中进行的查询 我是实体框架的新手,所以我仍然关注如何构建查询,特别是在选择“子”相关数据时. 我正在使用“急切加载”,因此我立即获得所有相关数据.但我遇到的问题是并非所有的Drop都被检索到
这是我正在使用.NET 4.0在Entity Framework 5.0.0 RC(代码优先)中进行的查询

我是实体框架的新手,所以我仍然关注如何构建查询,特别是在选择“子”相关数据时.

我正在使用“急切加载”,因此我立即获得所有相关数据.但我遇到的问题是并非所有的Drop都被检索到了.

var loads = context.Loads
            .Include(
                p => p.Device
            )
            .Include(
                p => p.Drops.Select(
                    a => a.Customer
                )
            ).Include(
                q => q.Drops.Select(
                   b => b.Items.Select(
                       c => c.Product
                   )
                )
            ).Where(
                u => u.Id.Equals(id)
            );

问题是,在生成的SQL查询中,客户正在内联到Drops,因此排除了没有Customer的Drops.

那么如何让它在这两个实体之间进行LEFT JOIN?

.Include似乎做左连接 – 所以为什么不.选择?

有没有其他方法.选择我可以使用哪种方法进行LEFT JOIN?

UPDATE

在与Amiram聊天后,我意识到我已经错误地设置了Drop模型.我需要将CustomerID列设置为可选:

public class Drop
{
    public int Id { get; set; }
    public int? CustomerId { get; set; }
    public int LoadId { get; set; }
    public DateTime Date { get; set; }

    public virtual Customer Customer { get; set; }
    public virtual ICollection<DropItem> Items { get; set; }
}

我应该立即想到这一点,但说实话,我被推迟了.Include()始终执行LEFT JOIN这一事实,无论模型关系中的基数如何.我在想.Select()必须有一些类似的行为,但不是它只是遵守模型的配置:)

解决方法

Drop是内部与客户联系的,因为Drop.CustomerID的类型为int而不是nullable int(在聊天中查找).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读