【问题标题】:C# Entity Framework Linq Join One to Many relationships in many tablesC# Entity Framework Linq 连接多个表中的一对多关系
【发布时间】:2014-12-16 18:13:00
【问题描述】:

有没有办法利用实体框架将多个表中的多对多关系绑定到 C# Linq 中的一个对象中?

在 php 中的 Yii 框架中,您可以加入具有许多关系的模型。每个都返回一个预定义的单独模型数组。

比如我有多个卖家,他们有多个客户,他们有多个销售订单,他们有多个销售订单项目。有没有办法将所有这些数据一起返回 1 个对象?

还是拆分多个查询?

【问题讨论】:

  • 你不喜欢接受你的问题的答案,不是吗?
  • 一旦我找到了可行的解决方案。
  • 好吧,我告诉过你它是如何工作的。我回答了你的问题和所有后续问题。我不会写你的代码。

标签: c# linq entity-framework


【解决方案1】:

我相信如果您正确设置数据模型,EF 会自动处理此问题。

假设您在表 PeopleProjects 之间存在多对多关系。如果您创建一个名为 PeopleProjects 的表,其只有两个字段是这两个表的外键,那么 EF 将在 People 对象上创建一个“Projects”集合属性,并在“Projects”上创建一个“People”集合属性对象。

【讨论】:

  • 您仍然必须将要加入结果集中的导航属性“包含”,否则选择具有许多深层链接的单个对象可能会导致返回整个数据库。
【解决方案2】:

如果您想确保不涉及延迟加载,这将是在一个巨大的对象图中获取所有内容的方法:

var obj = dbContext.Sellers.Include(
        r => r.Customers.Select(
            r2 => r2.SalesOrders.Select(
                r3 => r3.Items
            )
        )
    ).SingleOrDefault(seller => seller.Id == id)

【讨论】:

  • 你能和卖家一起拼桌吗? .join(?
  • 以上语句是c# EF LINQ 加入东西的方式。生成的 SQL 将包含上述类型数据所在的所有表的连接。因此,将有一个带有一个结果集的 SQL 查询,EF 会将其映射到您的类型。
  • 备注:“join”是关系术语,其中“include”是 EF 中对象图的术语。对象端的包含将导致关系存储后端的连接。
  • 既然有几个订单给客户,那么卖家包括,客户包括,销售订单包括销售订单项目选择
  • 不,上面的代码涵盖了这一点。您可以有多个 .Include 调用,但您可以将它用于图表中的不同路径。顺便说一下 LINQ/EF 的工作方式,您不能在 .Includes 中包含 .Includes。无论如何,上面的代码做你想做的事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
相关资源
最近更新 更多