实体框架概念澄清

时间:2015-07-23 20:48:21

标签: vb.net entity-framework asp.net-mvc-4 code-first circular-reference

这个问题纯粹是概念性的! 以下代码运行正常,但我无法弄清楚如何。 。

情景

我已经开始阅读实体框架概念,我目前正在使用位于here的信息和示例来构建我的第一个MVC项目。以下是该链接的代码示例:

    Imports System.Collections.Generic
    Imports System.Data.Entity

    Namespace MyDataAccessDemo

        Module Program

            Sub Main()

                Using context As New ProductContext()

                    Dim food As New Category With {.CategoryId = "FOOD"}
                    context.Categories.Add(food)

                    Dim cheese As New Product With {.Name = "Cheese"}
                    cheese.Category = context.Categories.Find("FOOD") 

                    context.Products.Add(cheese)
                    context.SaveChanges()
                End Using

            End Sub

        End Module

        Public Class ProductContext : Inherits DbContext

            Public Property Products As DbSet(Of Product)
            Public Property Categories As DbSet(Of Category)

        End Class


        Public Class Product

            Public Property ProductId As Integer
            Public Property Name As String
            Public Property Category As Category ' <-- Circular reference?

        End Class

        Public Class Category

            Public Property CategoryId As String
            Public Property Name As String
            Public Property Products As ICollection(Of Product) ' <-- Circular reference?

        End Class
    End Namespace

问题

所以,&#34;类别&#34;是一个班级&#34;产品&#34;是一个班级。 类别包含产品的集合,每个产品包含类别,其中包含其< 产品,每个产品包含类别,其中包含产品的集合。 。 。好吧,你明白了。

问题

为什么这样做?这不应该导致某种循环引用吗?我认为该类别将包含产品ID,反之亦然,而不是对象本身。

1 个答案:

答案 0 :(得分:2)

这些称为导航属性,您可以在实体框架网站上找到更多信息here