在Entity Framework中引用root的树结构

时间:2015-08-17 13:18:08

标签: asp.net entity-framework asp.net-web-api tree ef-code-first

我试图在Entity Framework中为订单建模树结构。现在我已经做了以下事情:

public class ProjectModel
{
    [Key]
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public int CustomerId { get; set; }

    public virtual List<ProjectNode> Nodes { get; set; }
}

public class ProjectNode
{
    [Key]
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    public string Path { get; set; }

    public int? ParentId { get; set; }

    [ForeignKey("ParentId")]
    public virtual List<ProjectNode> Children { get; set; }
}

我需要做的是在ProjectModel的任何级别获取对ProjectNode的根的引​​用,以便授权给定用户实际有权查看和更改包含的项目ProjectNode

public class ProjectNode {
    public int ProjectId { get; set; }  //<-- this
...

public class ProjectModel {
    [Key]
    public int Id { get; set; }         //<-- containing the value of this
}

我的问题是,是否可以在树结构的每个级别填充理论ProjectId属性,或者是否需要手动设置它。

我有一些工作,乍一看似乎允许此功能,但经过进一步调查,只填充了ProjectId ProjectNode ProjectModel Nodes {{1}} {1}}属性。

在我看来,通过结构向后递归到达根是非常低效的。

1 个答案:

答案 0 :(得分:1)

@TestWell对此答案的信用 -

显然,我需要为EF自动填充ProjectId上的ProjectNode属性所做的就是将IdProjectModel属性的名称更改为{ {1}}。

不幸的是,如果我向ProjectId添加一个CustomerId属性,我希望自动从节点的根{{1}上的同名属性中填充该属性,这似乎不起作用我意识到这是我正在尝试做的更有效的解决方案。