【问题标题】:EF self referencing table determine cyclesEF自参考表确定周期
【发布时间】:2018-10-22 18:21:31
【问题描述】:

我有一个自引用表,我正在使用实体框架来定义它。

public class Table
{
    public int Id { get; set; }

    public Table Parent { get; set; }

    [ForeignKey(nameof(Parent))]
    public int? ParentId { get; set; }

    public virtual ICollection<Table> Children { get; set; } = new List<Table>();
}

仅使用 EF 可以确定何时添加新关系是否存在循环。以数据为例:

  • 项目 1
    • 项目 2
      • 项目 3
    • 项目 4
    • 第 5 项

当我尝试将第 1 项添加到第 3 项时,我应该确定将创建一个循环。

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    “仅 EF”我假设您的意思是:通过单个 Linq 查询

    然后AFAIK,这是不可能的。

    您应该阅读:Recursive LINQ query: select item and all children with subchildren

    考虑以下“不仅仅是 EF”代码:

    public AddChildren(Table t) {
        var parent = this;
        while ( parent != null ) {
            if ( parent.Id == t.Id )
                throw new Exception("cycle");
            parent = parent.Parent;
        }
        Children.Add(t);
    }
    

    警告:在现有循环的情况下可能出现无限循环。

    也许你也应该:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多