【问题标题】:How to work with foreign keys when using Entity Framework code first首先使用实体​​框架代码时如何使用外键
【发布时间】:2016-01-04 17:08:36
【问题描述】:

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

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

实体框架代码首先从这个类创建一个具有自关系的表。

我想用 Linq 编写一个查询来返回所有外键为空的菜单,但我只有一个包含菜单列表的 lstmenu。而且我找不到要在查询中使用的任何 FK 列。

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

【问题讨论】:

  • 感谢@marc_c 编辑

标签: vb.net entity-framework ef-code-first code-first


【解决方案1】:

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

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 属性是否为空

【讨论】:

  • 非常感谢@octavioccl,您的第一个解决方案非常完美。我这样做: 'Public Class Menu Sub New() Me.lstmenu = New List(Of Menu) End Sub Property MenuID As Integer <foreignkey> Property ParentMenuID As Integer?属性标题 As String 属性描述 As String 属性 URL As String 属性 lstmenu As ICollection(Of Menu) End Class' </foreignkey> 并且效果很好。再次感谢
猜你喜欢
  • 2013-09-01
  • 2023-03-23
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多