我试图在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}}属性。
在我看来,通过结构向后递归到达根是非常低效的。
答案 0 :(得分:1)
@TestWell对此答案的信用 -
显然,我需要为EF自动填充ProjectId
上的ProjectNode
属性所做的就是将Id
中ProjectModel
属性的名称更改为{ {1}}。
不幸的是,如果我向ProjectId
添加一个CustomerId
属性,我希望自动从节点的根{{1}上的同名属性中填充该属性,这似乎不起作用我意识到这是我正在尝试做的更有效的解决方案。