实体框架 - 在结束使用后保持加载/包含的相关对象?

Sve*_*ang 6 .net entity-relationship entity-framework entity-framework-4

我试图在一个看起来像这样的方法中查询:

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
Run Code Online (Sandbox Code Playgroud)

我有一个Participation表,它在Participation和Team表之间有多对一的关系,并且Participation和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%>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

现在我理解这是因为我把查询放在一个使用中,在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
Run Code Online (Sandbox Code Playgroud)

这没用.我也尝试加载实体引用,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

该错误仍然存​​在.如何将所有这些相关对象加载到我的参与列表中,这样我仍然可以在我结束后使用??? 我知道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
Run Code Online (Sandbox Code Playgroud)

ber*_*hof 2

在第三个代码块中,您将包含TeamMember. 但是,从我在第二个代码块中看到的情况来看,您的导航属性是复数的,因此请尝试包含TeamMembers。