Ошибка с несколькими открытыми считывателями данных для дочерней сущности - PullRequest
0 голосов
/ 20 августа 2011

У меня есть модель ef 4, и я использую объекты самоконтроля. В этой модели есть объект под названием Организация. Каждая организация может иметь много мест (адресов). Если я попытаюсь выбрать одно местоположение (чтобы я мог его удалить), то:

var location = _container.Locations.FirstOrDefault(l => l.Id == id);

Я получаю сообщение об ошибке, что уже открыта программа чтения данных, поэтому я не могу открыть другую. Если я сделаю следующее:

var location = _container.Locations.Include("Organisation").FirstOrDefault(l => l.Id == id);

Тогда все работает просто отлично.

Используя Intellitrace, я вижу, что при неудачном запросе он выполняет команду ADO, чтобы получить только местоположение, а затем другую команду, чтобы получить местоположение и организацию.

Это ошибка или что-то, что мне нужно сделать по-другому для сущностей самоотслеживания?

1 Ответ

0 голосов
/ 21 августа 2011

Нет, это не ошибка. Это обычно происходит, если вы повторяете результат одного запроса, и на этой итерации вы выполняете другой запрос (это также может происходить из-за отложенной загрузки, но отложенная загрузка не поддерживается с само отслеживаемыми объектами). Самое простое решение - просто включить несколько активных считывателей данных (ваша база данных должна поддерживать это). В случае SQL Server 2005 и новее вы можете просто добавить в строку подключения эту часть: MultipleActiveResultSets=true;

...