estoy tratando de tener una consulta en un método que tiene este aspecto:Entity Framework - ¿Mantiene los objetos relacionados cargados/incluidos después de usar end?
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
Tengo una tabla Participación, que tiene un muchos a 1 entre Participación y equipo mesa, y una relación de muchos a muchos entre Participación y TeamMember tabla. En mi página de marcado que intento algo como esto cuando iterar a través de la lista de este modo:
<% 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%>
me sale el siguiente error:
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
Ahora entiendo que es porque puse la consulta dentro de una el uso y después de la End Using
no puedo conseguir los objetos relacionados, al mirar esto he intentado cambiar la consulta la instrucción using a esto:
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
esto no funcionó. También traté de cargar referencias de entidades como estas:
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
El error aún persiste. ¿Cómo puedo cargar todos estos objetos relacionados en mi lista de participación para poder hacer referencia a ellos aún después de que termine de usar ??? Sé que EF4 ahora hace lazyloading por defecto, pero incluso cuando cargué explícitamente objetos relacionados, parece que todavía no funciona.
Edit: Gracias por todas las respuestas, se trataba de no incluir el TeamMembers, ya que era una colección. Esto rompió toda la consulta. Así que la respuesta es:
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
Al usar Include y llamar a ToList debería obtener todos los datos necesarios y ObjectContext no debería ser necesario más adelante. ¿Podría verificar la consulta que se envía a la base de datos? A veces, EF ignora el Incluir aunque este caso no debería. –
En 'If count <> Nothing Y el equipo IsNot Nothing Then' ¿de dónde viene' team'? ¿Qué línea en su marcado está causando la excepción? ¿Es esto asp.net mvc? –
Ah, lo siento Brian, estaba haciendo abstracción de mis nombres de objeto para no dar ninguna indicación de dónde trabajo (como hubiera sucedido) y olvidé cambiar uno.La línea específica que está causando el error es: '