J'utilise l'entité framework (ef) et j'obtiens l'erreur suivante:
"Le résultat d'une requête ne peut être énuméré plus d'une fois.".
J'ai une classe de référentiel qui contient le contexte de données ef. J'ai ensuite une classe de contrôleurs (à ne pas confondre avec les contrôleurs MVC) qui contient une instance du référentiel. Jusqu'ici tout va bien ... J'ai une méthode de recherche sur le contrôleur qui est supposée renvoyer un tableau de RadComboBoxItemData
, utilisé pour remplir un contrôle Telerik RadComboBox.
public RadComboBoxItemData[] Search(int id, string searchText)
{
var query = context.Search(id, searchText);
List<RadComboBoxItemData> result = new List<RadComboBoxItemData>();
foreach (var item in query)
{
RadComboBoxItemData itemData = new RadComboBoxItemData();
itemData.Text = ""; // assign some text here..;
itemData.Value = ""; /*assign some value here..*/
result.Add(itemData);
}
return result.ToArray();
}
Lorsque je débogue mon code, je peux entrer dans la boucle foreach, mais j'obtiens une erreur disant:
Une exception de type 'System.InvalidOperationException' s'est produite dans System.Data.Entity.dll mais n'a pas été gérée dans le code utilisateur
Informations complémentaires: Le résultat d'une requête ne peut être énuméré plus d'une fois.
Mon entité utilise une importation de fonction d'un proc stocké existant.
// EF repository method calling the function imported method on the data context.
public IEnumerable<SearchItem> Search(int id, string searchText)
{
return this.entityContext.Search(id, searchText);
}
La fonction import Search
appelle un précédent stocké pour renvoyer une collection de SearchItem
.
J'ai le sentiment que la boucle foreach ne peut pas itérer à cause de quelque chose avec le ef.
Essayez d’énumérer explicitement les résultats en appelant ToList()
.
Changement
foreach (var item in query)
à
foreach (var item in query.ToList())
Essayez de remplacer ceci
var query = context.Search(id, searchText);
avec
var query = context.Search(id, searchText).tolist();
et tout fonctionnera bien.