Ich verwende das Entity Framework (EF) und erhalte den folgenden Fehler:
Msgstr "Das Ergebnis einer Abfrage kann nicht mehrmals aufgelistet werden.".
Ich habe eine Repository-Klasse, die den ef-Datenkontext enthält. Ich habe dann eine Controller-Klasse (nicht zu verwechseln mit MVC-Controllern), die eine Instanz des Repositorys enthält. So weit so gut ... Ich habe eine Suchmethode auf dem Controller, die ein Array von RadComboBoxItemData
zurückgeben soll, das zum Auffüllen eines Telerik RadComboBox-Steuerelements verwendet wird.
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();
}
Wenn ich meinen Code debugge, kann ich in die foreach-Schleife gelangen, aber dann erhalte ich die Fehlermeldung:
In System.Data.Entity.dll ist eine Ausnahme vom Typ "System.InvalidOperationException" aufgetreten, die jedoch im Benutzercode nicht behandelt wurde
Zusätzliche Informationen: Das Ergebnis einer Abfrage kann nur einmal aufgelistet werden.
Meine Entität verwendet einen Funktionsimport eines vorhandenen gespeicherten Prozesses.
// 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);
}
Die Funktion import Search
ruft eine gespeicherte Prozedur auf, um eine Sammlung von SearchItem
zurückzugeben.
Ich habe das Gefühl, dass die foreach-Schleife aufgrund eines Problems mit ef nicht iterieren kann.
Versuchen Sie, die Ergebnisse explizit aufzulisten, indem Sie ToList()
aufrufen.
Veränderung
foreach (var item in query)
zu
foreach (var item in query.ToList())
Versuchen Sie dies zu ersetzen
var query = context.Search(id, searchText);
mit
var query = context.Search(id, searchText).tolist();
und alles wird gut funktionieren.