【问题标题】:Populating dropdown lists based on EF child relationships根据 EF 子关系填充下拉列表
【发布时间】:2015-03-11 06:45:35
【问题描述】:

我是第一次使用 EF 编写一个简单的应用程序。 (EF6)

我的数据库有几个表,它们之间有外键关系。该应用程序将为每个表提供简单的显示、添加、更新、删除功能。

实体类是用多对一关系构建的。

表'汽车' CarID OwnerID ColorID Make Model

表 'Owners' OwnerID Fname Lname

表格“颜色”ColorID ColorName

在汽车“管理”页面上 - 所有者和颜色表应表示为下拉列表。

注意 - 这是一个网络表单应用程序。

我正在从后面的代码中调用我的“GetCar”函数并传递 CarID。

这是我的函数,它可以工作,但是我无法访问 Owner 属性。

Public Shared Function getCarByID(CarID As Integer) As Car
        Using db As MyAppContext = New MyAppContext
            Dim car As New Car
            car = db.Cars.First(Function(x) x.CarID = CarID)
            Return car
        End Using
End Function

所以我的问题是: 1:如何填充“所有者”下拉列表,我假设我需要编写一个单独的函数来返回所有者列表对象,对吗?

2:如何访问与汽车关联的 Owner 的属性?

我这样做的一个尝试(来自代码后面的 aspx):

Dim car As Car = New Car
    car = Car.getCarByID(CarID)
    Me.lblOwnerFirstName.Text = car.Owner.Fname

Intellisense 在键入 car.owner 时显示所有者属性。

我可以毫无问题地检索所有“汽车”属性。

ObjectContext 实例已被释放,不能再用于需要连接的操作。

我还尝试将 using 块移动到后面的代码中以进行测试并在那里设置 Me.lblOwnerFirstName.Text = car.Owner.Fname,但同样的错误。

感谢任何 cmets 或帮助,谢谢,

【问题讨论】:

    标签: c# vb.net entity-framework


    【解决方案1】:

    通常实体框架使用延迟加载方法来加载数据。这意味着它只加载查询中询问的数据。在您的情况下,实体框架已返回 Car 对象,然后在 using 语句结束时处理您的上下文对象。因此,如果您尝试从您的汽车访问所有者,则会引发错误。为了解决这个问题,你需要告诉 Entity Framework 像这样在 Car 中包含 Owner。

    Public Shared Function getCarByID(CarID As Integer) As Car
            Using db As MyAppContext = New MyAppContext
                Dim car As New Car
                car = db.Cars.Include("Owner").First(Function(x) x.CarID = CarID)
                Return car
            End Using
    End Function
    

    这也将返回 Owner 以及 Car 对象。

    【讨论】:

    • 工作完美,我之前尝试过类似的东西,但一定有语法问题。您还澄清了我对延迟加载的理解。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多