Уже открытый DataReader для модели ADO.NET Entity в проекте ASP.NET MVC
Я использую модель ADO.NET Entity для привязки данных и других манипуляций с данными для моего проекта ASP.NET MVC 4 Razor.
Я пытаюсь, в моей модели, связать данные в моем Controller
:
Когда я доберусь до линии 26:
26. Sender = db.GetLoginByUserId(item.sender_id).FirstOrDefault(),
27. Receiver = db.GetLoginByUserId(item.recv_id).FirstOrDefault(),
Я получаю такую ошибку:
{"Уже существует открытый DataReader, связанный с этим подключением, который должен быть закрыт первым."}
На самом деле, я не понимаю, как закрыть его вручную, потому что ADO.NET Entity является слишком автоматическим, и я не определил, чтобы какие-либо открытия закрывали для DataReader или соединения.
Я думаю, что это может быть из-за 15-й строки:
15. var currentUserId = db.GetUserIdByLogin(Request.Cookies["user-name"].Value);
И модель Entity действительно открывает соединение /DataReader и удаляет их только после фигурной скобки }
символ, когда GC собирает мусор.
Похоже, что я могу сделать только один вызов в одном методе, но если я хочу больше вызовов из модели Entity, как это можно сделать?
Спасибо!
1 ответ
Возможно, вы находитесь в цикле foreach на данный момент? Это обычный способ вызвать это - проповедовать первому читателю, выполняя n+1 (запрос на элемент) внутри цикла. Обычные исправления (одно из):
- настройте запрос для быстрого извлечения вложенных данных, чтобы они уже были доступны
- буферизовать внешний цикл в список / массив, чтобы считыватель завершил работу до того, как начнется внутренний цикл