none
EF Contexto RRS feed

  • Pergunta

  • Quando eu crio um arquivo de contexto para o ef, eu normalmente fazia:

    <style type="text/css">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545} </style>

    public DbSet<Carro> Carro { get; set; }

    No entanto, agora vejo o pessoal usando o virtual.
    Qual a razao ?

    <style type="text/css">p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545} </style>

    public virtual DbSet<Carro> Carro { get; set; }

    Valeu

    quinta-feira, 3 de janeiro de 2019 17:55

Todas as Respostas

  • Lazy Loading é o mecanismo utilizado pelos frameworks de persistência para carregar informações sobre demanda. Esse mecanismo torna as entidades mais leves, pois suas associações são carregadas apenas no momento em que o método que disponibiliza o dado associativo é chamado. Assim quando objetos são retornados por uma consulta, os objetos relacionados não são carregados ao mesmo tempo, ao invés, eles são carregados automaticamente quando a propriedade de navegação for acessada.

    O modificador virtual é utilizado pelo EF para fazer o Lazy Loading, que precisa criar instâncias de proxy que serão substituídas nessas propriedades virtuais.

    O uso de Lazy Loading pode sim trazer problemas de performance. Se fizer uma consulta que retorna, digamos, 100 Cotações, sem carregar os clientes explicitamente (eager loading), ao referenciar qualquer informação de Cliente, pra cada cliente diferente, será feita uma nova consulta na base de dados. Portanto nesse caso você poderia ter 100 novas consultas ao banco de dados.

    Pra evitar esse efeito é possível informar que você deseja que o EF faça "Eager Loading" dos clientes usando uma cláusula Include.

    var cotacoes = db.cotacoes.Include(m => m.Cliente).ToList(); // inclui cliente na query

    quinta-feira, 3 de janeiro de 2019 18:20