Я пытаюсь получить запрос в методе, который выглядит так:
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
У меня есть таблица Participation, которая имеет отношение "многие к 1" между таблицами Participation и Team, а также отношение "многие ко многим" между Таблица участия и TeamMember. На моей странице разметки я пробую что-то подобное, когда перебираю список следующим образом:
<% 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%>
Я получаю следующую ошибку:
Экземпляр ObjectContext удален и больше не может использоваться для операций, требующих подключения.
Теперь я понимаю, что это потому, что я поместил запрос в использование, и после End 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