palabra clave virtual, método de extensión Incluir, carga diferida, carga impaciente: ¿cómo funciona realmente la carga de objetos relacionados?
Cargar objetos relacionados en MVC puede ser bastante confuso.
Hay muchos términos que debe conocer y aprender si realmente quiere saber qué está haciendo cuando escribe las clases y controladores de su modelo de entidad.
Un par de preguntas que he tenido durante mucho tiempo son: ¿Cómo funciona elvirtual
palabra clave trabajo y cuando debo usarlo? Y como funcionaInclude
¿El método de extensión funciona y cuándo debo usarlo?
Esto es lo que estoy hablando;
virtual
palabra clave:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace LazyLoading.Models
{
public class Brand
{
public int BrandId { get; set; }
public string Name { get; set; }
public int ManufacturerId { get; set; }
public virtual Manufacturer Manufacturer { get; set; }
}
}
Y elInclude
método de extensión:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LazyLoading.Models;
namespace LazyLoading.Controllers
{
public class LazyLoadingStoreController : Controller
{
private UsersContext db = new UsersContext();
//
// GET: /LazyLoadingStore/
public ActionResult Index()
{
var brands = db.Brands.Include(b => b.Manufacturer);
return View(brands.ToList());
}
... Other action methods ...
Tenga en cuenta que elIndex()
El método de acción es autogenerado por Visual Studio. Sí, Visual Studio agregó automáticamente el.Include(b => b.Manufacturer)
. Eso es bastante bonito.