반응형
쿼리 결과는 두 번 이상 열거 될 수 없습니다.
엔티티 프레임 워크 (ef)를 사용 중이며 다음 오류가 발생합니다.
"질의 결과는 두 번 이상 열거 될 수 없습니다."
ef 데이터 컨텍스트를 포함하는 저장소 클래스가 있습니다. 그런 다음 저장소의 인스턴스를 포함하는 컨트롤러 클래스 (MVC 컨트롤러와 혼동하지 말 것)가 있습니다. 지금까지 훌륭했습니다 ... 컨트롤러 RadComboBoxItemData에 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();
}
내 코드를 디버깅 할 때 foreach 루프에 들어갈 수 있지만 다음과 같은 오류가 발생합니다.
System.Data.Entity.dll에서 'System.InvalidOperationException'유형의 예외가 발생했지만 사용자 코드에서 처리되지 않았습니다.
추가 정보 : 쿼리 결과는 두 번 이상 열거 될 수 없습니다.
내 엔터티는 기존 저장된 프로 시저의 함수 가져 오기를 사용합니다.
// 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);
}
함수 가져 오기 Search는 저장된 precedure를 호출하여 SearchItem.
foreach 루프가 ef로 인해 반복 할 수 없다는 느낌이 있습니다.
을 호출하여 결과를 명시 적으로 열거 해보십시오 ToList().
변화
foreach (var item in query)
...에
foreach (var item in query.ToList())
이것을 교체하십시오
var query = context.Search(id, searchText);
와
var query = context.Search(id, searchText).tolist();
모든 것이 잘 작동합니다.
이 유형의 오류가 발생하면 평소 목록으로 proc 데이터를 저장하고 다른 컨트롤을 바인딩하는 데 사용하는 것이 좋습니다.이 오류가 발생하므로 다음과 같이 해결했습니다.
repeater.DataSource = data.SPBinsReport().Tolist();
repeater.DataBind();
이렇게 해봐
반응형
'IT Share you' 카테고리의 다른 글
| Kotlin-문자열을 올바르게 연결하는 방법 (0) | 2020.11.10 |
|---|---|
| sys.platform에서 가능한 값? (0) | 2020.11.10 |
| OWIN의 GetExternalLoginInfoAsync 항상 null 반환 (0) | 2020.11.09 |
| Java에서 stream.sorted ()로 목록 정렬 (0) | 2020.11.09 |
| 날짜 시간 값을 문자열로 변환 (0) | 2020.11.09 |