参考 Entity Framework 中根的树结构
Tree structure with reference to root in Entity Framework
我正在尝试为 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; }
}
我需要做的是在 ProjectNode
的任何级别获取对根 ProjectModel
的引用,以便授权给定用户实际有权查看和更改项目其中包含 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
属性,或者我是否需要手动设置它。
我有一些工作,乍一看似乎允许此功能,但经过进一步调查,只填充 ProjectModel
中包含的 ProjectNode
的 ProjectId
Nodes
属性.
在我看来,通过结构向后递归以到达根节点效率极低。
此答案归功于@TestWell -
显然,为了让 EF 自动填充 ProjectNode
上的 ProjectId
属性,我需要做的就是更改 Id
[=24] 的名称=] 在 ProjectModel
到 ProjectId
中。
不幸的是,如果我将 CustomerId
属性 添加到 ProjectNode
,我希望从 属性 自动填充在节点的根 ProjectModel
上使用相同的名称,我意识到这是对我正在尝试做的事情更有效的解决方案。
我正在尝试为 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; }
}
我需要做的是在 ProjectNode
的任何级别获取对根 ProjectModel
的引用,以便授权给定用户实际有权查看和更改项目其中包含 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
属性,或者我是否需要手动设置它。
我有一些工作,乍一看似乎允许此功能,但经过进一步调查,只填充 ProjectModel
中包含的 ProjectNode
的 ProjectId
Nodes
属性.
在我看来,通过结构向后递归以到达根节点效率极低。
此答案归功于@TestWell -
显然,为了让 EF 自动填充 ProjectNode
上的 ProjectId
属性,我需要做的就是更改 Id
[=24] 的名称=] 在 ProjectModel
到 ProjectId
中。
不幸的是,如果我将 CustomerId
属性 添加到 ProjectNode
,我希望从 属性 自动填充在节点的根 ProjectModel
上使用相同的名称,我意识到这是对我正在尝试做的事情更有效的解决方案。