0

忍受我 - 我不太清楚如何解释这个......

我有一个“项目”基类,在这种情况下想象它是一项任务。一个给定的任务可以有子任务(多个子任务),一个子任务可以有多个父任务。

例如,我可能有一个名为“购买罐装金枪鱼”的任务,这可能显示为“购物”的子任务以及“今天的任务”。

到目前为止一切顺利,但更重要的是我希望订购子任务。我看不到如何在 EF 中执行此操作。我已经开始研究 OrderedItem 类的概念,但我无法让它在 EF 中工作。

编辑:

每个父子连接的顺序需要是任意的。这意味着相同的项目将有每个父级的不同订单。例如,购买金枪鱼可能是我今天的第一要务,但在我的购物清单上排在第 11 位。

关于最佳方法的任何想法?

Public MustInherit Class ItemBase
    Public Property ID As Integer
    Public Property Title As String
    Public Overridable Property Parents As ICollection(Of OrderedItem)
    Public Overridable Property Children As ICollection(Of OrderedItem)
End Class

Public Class OrderedItem
    <Key(), Column(Order:=0)> _
    Public Property ParentID As Integer
    <Key(), Column(Order:=1)> _
    Public Property ItemID As Integer
    Public Property Parent As ItemBase
    Public Property Item As ItemBase
    Public Property Order As Integer
End Class
4

1 回答 1

1

根据您的编辑 - 您似乎做得很好,使用带有附加Order字段的连接表似乎是最好的方法。

请注意,虽然 OrderedItem 的ParentIdandItemId不是(因此不需要Key属性),但它们是外键,引用实体表。EF 通常会从导航属性中自行找出外键,但是在识别整数属性(ItemID等)时,您可以使用ForeignKey("...")属性给它一个提示(请参阅此答案:实体框架中的外键 4.1

另请注意,更好的名称OrderedItem将是ItemChildItemOrder或某事,因为它不代表业务实体,而是连接表条目。

编辑2:用法是item.Children.OrderBy(Function(child) child.Order).ToList()

于 2013-10-14T08:35:46.660 回答