我正在尝试使用如下所示的方法进行查询:
Public Shared Function listParticipationsByTeamCount(ByVal count As Integer, ByVal challenge As Challenge) As List(Of Participation)
Dim participationList As List(Of Participation)
If count <> Nothing And challenge IsNot Nothing Then
Using db As New DatabaseEntities()
participationList = db.Participations.Where(Function(x) x.TeamCount = count And x.Challenge.Id = challenge.Id).OrderByDescending(Function(x) x.TeamCount).ThenBy(Function(x) x.Team.Name).ToList()
End Using
End If
Return participationList
End Function
我有一个参与表,参与和团队表之间存在多对一关系,并且参与表之间存在多对多关系参与和团队成员表。在我的标记页面上,当我像这样迭代列表时,我会尝试这样的操作:
<% For Each participation As Participation In participationsList%>
<tr>
<td><a class="external-link" href="<%= participation.Team.Website %>"><%= participation.Team.Name%></a></td>
<td><%= participation.Percentage%>%</td>
<td>
<% For Each member As TeamMember In participation.TeamMembers%>
<%= member.Name%><br />
<% Next%>
</td>
</tr>
<% Next%>
我收到以下错误:
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
现在我明白了,这是因为我将查询放在 using 中,并且在 End using
之后我无法获取相关对象,在查找此内容后,我尝试将查询更改为 using 语句这个:
Using db As New DatabaseEntities()
participationList = db.Participations.Include("Team").Include("TeamMember").Where(Function(x) x.TeamCount = count And x.Team.Id = team.Id).OrderByDescending(Function(x) x.TeamCount).ThenBy(Function(x) x.Team.Name).ToList()
End Using
这不起作用。我还尝试加载实体引用,如下所示:
Using db As New DatabaseEntities()
participationList = db.Participations.Where(Function(x) x.TeamCount = count And x.Team.Id = team.Id).OrderByDescending(Function(x) x.TeamCount).ThenBy(Function(x) x.Team.Name).ToList()
For each part as Participation in participationList
part.TeamReference.Load()
part.TeamMembers.Load()
Next
End Using
错误仍然存在。如何将所有这些相关对象加载到我的参与列表中,以便在我结束使用后仍然可以引用它们???我知道 EF4 现在默认执行延迟加载,但即使我显式加载相关对象,它似乎仍然不起作用。
编辑:感谢大家的所有回答,这是一个不将 TeamMembers 包含在内的复数问题,因为它是一个集合。这打破了整个查询。所以答案是:
Using db As New DatabaseEntities()
participationList = db.Participations.Include("Team").Include("TeamMembers").Where(Function(x) x.TeamCount = count And x.Team.Id = team.Id).OrderByDescending(Function(x) x.TeamCount).ThenBy(Function(x) x.Team.Name).ToList()
End Using
最佳答案
问题似乎是您正在设置查询但未执行它。
- 只有在 using 语句中时,您才有权访问数据库。
- 当您实际尝试使用数据时,请求会发送到数据库。
因此,在退出 using 语句之前,您应该循环遍历数据并将其放置在域对象中。
关于.net - Entity Framework - 在结束使用后保留加载/包含的相关对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5421629/