У меня есть следующий код, который извлекает данные из таблицы клиентов
var customers= context.CustomerEntities.Include("Addresses").Select(Mapper.Map).ToList();
Функция mapper отображает объект сущности в бизнес-объект и выглядит так:
internal static Customer Map(CustomerEntity entity)
{
if (entity == null)
return null;
return new Customer
{
Id = entity.Id,
Name = entity.Name,
Addresses = Map(entity.Addresses)
};
}
Теперь приведенный выше код работает хорошо.
Однако, когда я пытаюсь сделать это:
var customers= context.CustomerEntities.Select(Mapper.Map).ToList();
Я получаю сообщение об ошибке: There is already an open DataReader associated with this Command which must be closed first
, когда выполняется функция Mapper.
Теперь я знаю, что для решения этой проблемы мне нужно установить multipleactiveresultsets=True
в строку подключения. Я попробовал это, и это решило мою проблему.
Однако, когда я запускал профилировщик SQL, запрос всех клиентов из фреймворка сущности автоматически извлекал все адреса, даже если они мне не нужны.
Есть ли обходной путь помимо установки multipleactiveresultsets=True
? Я не хочу, чтобы адреса были ленивы загружены все время.