Перечисление результата хранимой процедуры - результат запроса не может быть перечислен более одного раза - PullRequest
2 голосов
/ 21 декабря 2011

Я вызываю хранимую процедуру:

ObjectResult<ComplexType1> result = context.ListSomething(model.SelectedDatabase);
ViewBag.WebGrid = new WebGrid(source: result, rowsPerPage: int.MaxValue, canSort: false, canPage: false);

однако при передаче результат в качестве источника WebGrid Я получаю:

System.InvalidOperationException: результат запроса не может быть перечислен более одного раза.

Я немного выдвинут как ObjectResult реализует IEnumerable (не IQueryable ).Какова причина этого исключения и почему я должен вызвать метод ToList () :

var result = context.ListSomething(model.SelectedDatabase).ToList();
ViewBag.WebGrid = new WebGrid(source: result, rowsPerPage: int.MaxValue, canSort: false, canPage: false);

, чтобы он работал?Не могли бы вы предоставить мне некоторую документацию, объясняющую это (например, из Programming Entity Framework, 2nd Edition , как я сейчас читаю, но я не помню ничего, что объясняло бы этот механизм до сих пор).

Спасибо, Павел

1 Ответ

4 голосов
/ 21 декабря 2011

Это связано с тем, что ObjectResult<T> имеет внутренний доступ к DataReader, что позволяет перечислять результат только один раз в прямом направлении, поэтому, если вы хотите повторить результат еще раз, не вызывая ToList, сначала вы должны снова выполнить хранимую процедуру и получить новый ObjectResult<T> экземпляр.

...