2012-02-10 3 views
1

Почему Entity Framework (4.1), с моделью данных, которую вы можете ожидать позади следующего запроса, возвращает InvalidOperationException («Существует уже открытый DataReader, связанный с этой Командой, который должен быть закрыт первым») на этом?Entity Framework LINQ SelectMany exception

((IEnumerable<Company>)db.Companies).SelectMany(x => x.Department).ToList(); 

ответ

2

Ваш запрос, вероятно, не представляет проблемы. Возможно, вам потребуется включить атрибут MultipleActiveResultSets в строке подключения. Check out the answer for this one.

+0

Aha! Большое спасибо. – stovroz

0

Поскольку использование Linq к EF как IEnumerable mantains DataReader открытым, таким образом, вы не можете сделать другие запросы перед его закрытием. Попробуйте представить коллекцию как IList, например:

db.Companies.ToList().SelectMany(x => x.Department).ToList(); 
+0

Вы можете сделать это: ((IEnumerable ) db.Companies) .где (х => x.Name == "IBM") ToList() – stovroz

+0

@stovroz:. Почему вы используете этот бросок в первое место? – BrokenGlass

+0

@BrokenGlass. Бросок должен имитировать вызов db внутри функции GetCompanies() этого типа возврата. – stovroz