忍受我 - 我不太确定如何解释这个...
我有一个'item'基类,在这种情况下想象它是一个任务。给定任务可以有子任务(多个子项),子任务可以有多个父项。
E.g。我可能会有一个名为“购买金枪鱼罐头”的任务,这可能是“购物”和“今天的任务”的子任务。
到目前为止一直很好,但是踢球者是我希望订购儿童任务。我无法在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
答案 0 :(得分:1)
根据您的编辑 - 您似乎做得很好,使用带有其他Order
字段的联接表似乎是最好的方法。
请注意,OrderedItem的ParentId
和ItemId
不是键(因此不需要Key
属性),它们是外来的密钥,引用实体表。 EF通常会从导航属性中自行计算外键,但是当识别整数属性(ItemID
等)时,您可以使用ForeignKey("...")
属性给它一个提示(请参阅这个回答:Foreign keys in entity framework 4.1)
另请注意,OrderedItem
的更好名称是ItemChildItemOrder
或其他内容,因为它不代表业务实体,而是连接表条目。
编辑2:用法为item.Children.OrderBy(Function(child) child.Order).ToList()