スレッドのEntityFramework4.3でクエリを実行すると、以下のエラーが発生します。
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
以下は私のスレッドが始まるところです、そしてそれはでエラーになりvar item = _gamesRepository.Get(gameIncludes, q => q.Id == gameId);
ます。私は何か間違ったことをしていますか、それとも別のアプローチを使用する必要がありますか?
public void ProcessGame(int gameId)
{
new Thread(() =>
{
Expression<Func<Game, object>>[] gameIncludes = {
q => q.DivisionGameTeamResults,
q => q.DivisionGameTeamResults.Select(g => g.DivisionBracketGameParticipant),
q => q.DivisionGameTeamResults.Select(g => g.DivisionTeamPoolGame),
q => q.DivisionGameTeamResults.Select(g => g.DivisionTeamPoolGame.DivisionTeamPool),
e => e.DivisionGameTeamResults.Select(q => q.DivisionBracketGameParticipant.DivisionBracketGame.DivisionBracketGameParticipants.Select(t => t.DivisionBracketGameParticipantTeam.DivisionTeam.Team)),
e => e.DivisionGameTeamResults.Select(q => q.DivisionBracketGameParticipant.DivisionBracketGame.DivisionLoserBracketGameParticipants.Select(d => d.DivisionBracketGameParticipantPool.DivisionPool)),
e => e.DivisionGameTeamResults.Select(q => q.DivisionBracketGameParticipant.DivisionBracketGame.DivisionLoserBracketGameParticipants.Select(d => d.DivisionBracketGameParticipantTeamPool.DivisionTeamPool.DivisionTeam)),
q => q.DivisionGameTeamResults.Select(d => d.DivisionTeamPoolGame.DivisionTeamPool.DivisionPool.Division.Event.Members),
q => q.DivisionGameTeamResults.Select(d => d.DivisionBracketGameParticipant.DivisionBracketGame.BracketPart.DivisionBracketPart.DivisionBracket.Division.Event.Members)
};
var item = _gamesRepository.Get(gameIncludes, q => q.Id == gameId);
if (item != null)
{
if (item.DivisionGameTeamResults.All(d => d.DivisionTeamPoolGame != null))
{
// Pool Game
_divisionBracketsService.ProcessPoolGame(item);
}
else if (item.DivisionGameTeamResults.All(d => d.DivisionBracketGameParticipant != null))
{
// Bracket Game
_divisionBracketsService.ProcessBracketGame(item);
}
UnitOfWork.Commit();
}
}).Start();
}
更新:
その問題を修正するために必要な変更を加えました。
var gamesRepository = DependencyResolver.Current.GetService<IGamesRepository>();
var divisionBracketsService = DependencyResolver.Current.GetService<IDivisionBracketsService>();