palavra-chave virtual, Incluir método de extensão, carregamento lento, carregamento antecipado - como o carregamento de objetos relacionados realmente funciona

Carregar objetos relacionados no MVC pode ser bastante confuso.

Há muitos termos que você precisa conhecer e aprender se realmente quiser saber o que está fazendo ao escrever suas classes e controladores de modelo de entidade.

Algumas perguntas que eu tenho há muito tempo são: Como ovirtual trabalho de palavra-chave e quando devo usá-lo? E como é que oInclude trabalho de método de extensão e quando devo usá-lo?

Aqui está o que eu estou falando;

virtual palavra chave:

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; }
    }
}

E aInclude método de extensão:

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 ...

Observe que oIndex() O método de ação é gerado automaticamente pelo Visual Studio. Sim, o Visual Studio adicionou automaticamente o.Include(b => b.Manufacturer). Isso é muito legal.

questionAnswers(3)

yourAnswerToTheQuestion