我是第一次使用EF编写一个简单的应用程序。 (EF6)
我的数据库有几个表,它们之间有外键关系。该应用程序将为每个表格提供简单的显示,添加,更新,删除功能。
实体类是使用多对一关系构建的。
表'汽车'CarID所有者ID ColorID制作模型
表'所有者'所有者ID Fname Lname
表'颜色'ColorID ColorName
在汽车管理页面上 - 所有者和颜色表应该表示为下拉列表。
注意 - 这是一个webforms应用程序。
我从后面的代码调用我的'GetCar'函数并传递CarID。
这是我的功能,它可以工作,但我无法访问所有者属性。
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:如何填充“所有者”下拉列表,我假设我需要编写一个单独的函数来返回一个List of Owners对象,对吗?
2:如何访问与汽车相关联的所有者的属性?
我尝试这样做之一(来自代码后面的aspx):
Dim car As Car = New Car
car = Car.getCarByID(CarID)
Me.lblOwnerFirstName.Text = car.Owner.Fname
输入car.owner时,Intellisense会显示所有者属性。
我可以毫无问题地检索所有'汽车'属性。
ObjectContext实例已被释放,不能再用于需要连接的操作。
我也尝试将using块移动到后面的代码中进行测试并在那里设置Me.lblOwnerFirstName.Text = car.Owner.Fname,但是同样的错误。
任何评论或帮助表示赞赏,谢谢,
答案 0 :(得分:1)
通常,Entity框架使用Lazy加载方法来加载数据。这意味着它只加载查询中询问的数据。在您的情况下,Entity框架已返回Car对象,然后在using语句的末尾处理您的上下文对象。因此,如果您尝试从汽车中访问所有者,则会抛出错误。要解决这个问题,您需要告诉实体框架像这样包含所有者与汽车。
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
这也将返回所有者以及Car对象。