как закрыть командное соединение с помощью LINQ / EF

#c# #entity-framework #ado.net

#c# #entity-framework #ado.net

Вопрос:

работая с Azure и EF, я получаю сообщение об ошибке:

  DataReader associated with this Command which must be closed first. 
  

Это потому, что мои запросы вложены:

 foreach (Element s in ElementSet.All()) {
   if (somecondition) {  
     ElementSet.Add() 
   }
}
  

Как я могу загрузить все элементы из ElementSet и закрыть соединение, прежде чем перебирать их с помощью foreach?

PS: В настоящее время с SQL azure я не могу установить MARS в строке подключения, которая заставила бы сервер принимать несколько подключений.

Ответ №1:

MARS не будет использовать несколько подключений, но это позволит выполнять несколько одновременных операций через одно соединение. MARS был недавно добавлен в SQL Azure, поэтому вам обязательно следует его включить.

Если вы хотите принудительно загрузить EF все объекты, немедленно вызовите ToList в своем запросе.

 foreach (Element s in ElementSet.All().ToList()) {
   if (somecondition) {  
     ElementSet.Add() 
   }
}