c# - Entity Framework 和自引用表

标签 c# database entity-framework tree entity-framework-4.1

我需要一个数据库,该数据库以一个名为“User”的表开头,该表需要 self 引用并包含一个非常深的相关对象图。它需要像下图的左侧(忽略右侧)。

enter image description here

我还需要向上和向下遍历此图以计算百分比、总数等。换句话说,在某些情况下我需要遍历整个图。

这是否可能和/或如何实现?是否可以直接在 LINQ 语句中进行遍历?例子?

编辑: 我基本上是在尝试创建一个网络营销场景,并且需要计算每个人的收入。

例子:

  1. 能够计算特定用户下每个用户的总销售额(因此每个用户都会有某种收入)。
  2. 计算树中特定层级的佣金(例如,如果顶层人员下面有 3 个人,每人以 1 美元的价格销售产品,而佣金为 50%,那么就有 1.50 美元。)
  3. 如果我在上图(左侧)中查询“B”,我应该得到“B,H,I,J,N,O”

希望对你有帮助:S

最佳答案

您不能仅使用 LINQ 以转换为单个 SQL 查询(或它们的常量计数)的方式遍历整个树。您可以对每个级别使用一个查询,也可以使用一个查询来完成此操作,该查询仅限于特定数量的级别(但这样的查询对于许多级别来说会变得非常大)。

在 T-SQL 中(我假设您使用的是 MS SQL Server),您可以使用 recursive common table expressions 执行此操作.应该可以将其放入一个存储过程中,您可以从 LINQ 使用该存储过程来获取您真正想要的信息。

总而言之,您的选择是:

  1. 不要使用 LINQ,只使用带有递归 CTE 的 SQL
  2. 在 LINQ 的存储过程中使用递归 CTE
  3. 使用 LINQ,为每个级别创建一个查询
  4. 使用仅限于几个级别的难看的 LINQ 查询

关于c# - Entity Framework 和自引用表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7304881/

相关文章:

mysql - 更好的 hibernatre 数据库设计?

mysql - 某些条件下的独特 varchar

c# - 除了相应的 `foreign key Id` 之外,我还应该定义 `navigation property` 属性吗?

c# - 如何运行迁移配置类的 Seed() 方法

c# - 使用 DTO 和 POCO 对象时处理导航属性的最佳做法是什么?

c# - 在 Entity Framework Core 中添加数据库后子模型列表为空

c# - 连续 2 个 c# 程序游戏

c# - 串行调用异步方法

c# - 为什么 Property Set 会抛出 StackOverflow 异常?

php - Jquery 从数据库表自动建议