Spesso capita l'esigenza di eseguire un ciclo For..Each su entity set lavorando con ADO.NET Entity Framework. Qualcosa tipo:
For Each animal In MyModel.Animals
'Do something here...
Next
Nell'esempio di cui sopra l'entity set Animals è di tipo ObjectSet(Of T), dove chiaramente T è un tipo fittizio Animal. Nel ciclare direttamente un oggetto di tipo ObjectSet(Of T) l'EF potrebbe restituire la seguente eccezione:
"New transaction is not allowed because there are other threads running in the session". Per risolvere il problema è necessario evitare di ciclare direttamente contro l'ObjectSet, il che vuol dire poter usare anche un metodo extension come AsQueryable o ToList:
For Each animal In MyModel.Animals.AsQueryable()
Next
In questo modo sarà possibile eseguire correttamente il ciclo evitando l'errore, ovviamente potrebbe essere preferibile scrivere una query LINQ piuttosto che usare direttamente gli extension, a seconda del contesto.
Alessandro