首先使用 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 属性 是否为空
我创建了一个具有自我关系的 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 属性 是否为空