Это немного зависит от того, как вы отправляете данные в представление.Если оставить запрос linq как ленивый, то произойдет подкачка базы данных.Однако, если в вашем слое данных вы выполняете ToList () или другое перечисление, вы пропустите это, извлекая все данные, и вам придется что-то настраивать, чтобы вручную их выгружать.
Toлучше показать ...
// In your initial page load
public ActionResult Index()
{
return View(new MyViewModel
{
// ... other view data
// set order or .Where for initial load, but don't use .ToList or enumerate
MyObjects = _db.MyObjects.OrderBy(m => m.Name)
// When this is passed into the grid, it will finalize the paging there
// and when the grid enumerates MyObjects, it will only pull the relevant
// items from the database.
});
}
Если вы используете привязку ajax ...
// In an ajax grid responder action
[GridAction]
public ActionResult AjaxGridAction()
{
// Assuming _db is a CodeFirst DbContext, GridModel will handle filtering,
// paging, and sorting in the database as linq applies those methods to the
// IQueryable _db.MyObjects
return View(new GridModel(_db.MyObjects));
}
Если вы используете шаблон репозитория (хотя DbContext уже действительно является репозиторием),затем он возвращает ленивые объекты:
public IEnumerable<T> GetMyObjects()
{
// Don't use ToList or enumerate them in your repository - that will
// pull all the data before the Telerik grid has filtered it.
return _db.MyObjects;
}
Несмотря на то, что все проходит вокруг IEnumerable, когда приходит время фактически выполнять итерацию по коллекции, конкретный тип (DbSet в приведенных выше примерах) будет тем, что фактически обрабатывает это..
Если вы используете что-то вроде AutoMapper, имейте в виду, что очень просто случайно извлечь все записи во время отображения.AutoMapper 2 имеет решение для проецирования из базы данных без итераций, но пока нет документации.Я использовал это решение для этого до тех пор, пока у меня не будет времени исследовать AutoMapper 2.
_db.MyObjects.Project().To<MyObjectsViewModel>();
По сути, вместо этого выполняется обертывание свойств автопроектов:
_db.MyObjects
.Select(o => new MyObjectsViewModel { // manually map properties, ewww });