首先使用 Entity Framework 代码时如何使用外键

How to work with foreign keys when using Entity Framework code first

我创建了一个具有自我关系的 Menu class。

Public Class Menu
    Sub New()
        Me.lstmenu = New List(Of Menu)
    End Sub
    Property MenuID As Integer
    Property Title As String
    Property Description As String
    Property URL As String
    Property lstmenu As ICollection(Of Menu)
End Class

Entity Framework code-first 从这个 class 创建一个 table 与自我关系。

我想用 Linq 写一个查询 return 我所有的外键都为空的菜单,但我只有一个包含菜单列表的 lstmenu。而且我找不到任何 FK 列可用于我的查询。

请帮助我如何编写查询来查找外键为空的所有记录。

您可以做的一件事是在您的 Menu 实体中将 FK 属性 声明为可为 null 的整数,并将导航 属性 声明为关系的另一端。以下解决方案使用数据注释:

Public Class Menu
    Sub New()
        Me.lstmenu = New List(Of Menu)
    End Sub
    Property MenuID As Integer

    <ForeignKey("ParentMenu")>
    Property ParentMenuID As Integer? 'Change the FK name and nav. property name at your convinience
    Property ParentMenu As Menu

    Property Title As String
    Property Description As String
    Property URL As String
    Property lstmenu As ICollection(Of Menu)
End Class

如果您想使用 Fluent Api 配置您的关系以避免在您的模型中使用属性,您也可以对上下文执行相同的覆盖 OnModelCreating 方法:

Protected Overrides Sub OnModelCreating(ByVal modelBuilder As DbModelBuilder)

    modelBuilder.Entity(Of Menu)().
    HasOptional(Function(t) t.ParentMenu).
    WithMany(Function(t) t.lstmenu).
    HasForeignKey(Function(t) t.ParentMenuId)

End Sub

现在您可以在查询中验证菜单是否与父菜单关联,检查 FK 属性 是否为空