LAZY LOADING EF6

 Tópico anterior Próximo tópico Novo tópico

LAZY LOADING EF6

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#480010 - 05/03/2018 23:14:26

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 05/03/2018 23:15:56 por CLEVERTON

E ai cambada, dá uma ajuda ai ao jovem padawan.
Eu não consigo colocar isso pra funcionar usando o Lazy<T>
Eu vi uns exemplos, mas não consegui adequar.

namespace TestesEF6.Models.Domain
{
    public partial class myContext : DbContext
    {
        public myContext()  : base("name=myContext") {}

        public virtual DbSet<Pessoa> Pessoas { get; set; }
        public virtual DbSet<Pedido> Pedidos { get; set; }
    }
}

    public partial class Pessoa
    {
        [Key]
        public int Codigo { get; set; }

        public int Nome { get; set; }
    }

    public partial class Pedido
    {

        [Key]
        public int Codigo { get; set; }

    public int CodPessoaDestina { get; set; }

        [ForeignKey("FK_Cliente")]
        public virtual Lazy<Pessoa> Cliente { get; set; }
    }



        static void Main(string[] args)
        {
            myContext _context = new myContext();
            _context.Configuration.LazyLoadingEnabled = false;

            var a = _context.Pedidos.FirstOrDefault();
            bool criou = a.Cliente.IsValueCreated;

            var pessoa = a.Cliente.Value;
            var test = pessoa;
      }





#480011 - 05/03/2018 23:47:02

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Se sua propriedade está virtual, o EF já entende como Lazy. Faça o override do método "OnModelCreating", coloque no construtor da classe o LazyLoadingEnabled como true e ProxyCreationEnabled também como true e já estará fazendo a leitura de modo "deferred", que é só um nome bonitinho pra "Lazy loading"

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#480017 - 06/03/2018 10:19:14

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
        public myContext()    : base("name=myContext")
        {
            this.Configuration.LazyLoadingEnabled = true;
            this.Configuration.ProxyCreationEnabled = true;
        }


Continua retornando NULL Pedido.Cliente

            myContext _context = new myContext();
            var a = _context.Pedidos.FirstOrDefault();
            var pessoa = a.Cliente.Value;




#480018 - 06/03/2018 10:44:48

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
"Cliente" não é uma classe POCO? Ou é só um valor?


_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#480022 - 06/03/2018 12:05:05

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
É uma classe, mas quando uso o LazyT, vi nos exemplos que deve ser chamado dessa forma.



#480023 - 06/03/2018 12:13:11

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Já tenteou buscar uma das propriedades da classe? Tipo:

var x = a.Cliente.Nome;


_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#480024 - 06/03/2018 12:15:54

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Se estiver com Lazy<T>.
        [ForeignKey("FK_Cliente")]
        public virtual Lazy<Pessoa> Cliente { get; set; }

Eu só consigo acessar desta forma:

            myContext _context = new myContext();
            var a = _context.Pedidos.FirstOrDefault();
            var pessoa = a.Cliente.Value.Nome;




#480025 - 06/03/2018 12:19:49

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Se eu REMOVER o Lazy<T> Ele SEMPRE carrega.
não importa como estejam as configurações no construtor do meu Contexto


    [ForeignKey("FK_Cliente")]
        public virtual Pessoa Cliente { get; set; }


        public myContext()    : base("name=myContext")
        {
            this.Configuration.LazyLoadingEnabled = true;
            this.Configuration.ProxyCreationEnabled = true;
        }





#480026 - 06/03/2018 12:42:51

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 06/03/2018 12:46:47 por CLEVERTON

Se eu fizer isso funciona, mas a questão é que eu não consigo passar um valor para dentro de FirstOrDefault(() => l.Codigo.Equals(Atributo da Classe)));

        [ForeignKey("FK_Cliente")]
        public Lazy<Pessoa> Cliente = new Lazy<Pessoa>(() => new myContext().Pessoas.FirstOrDefault(l => l.Codigo.Equals(1)));


            myContext _context = new myContext();
            var a = _context.Pedidos.FirstOrDefault();
            var pessoa1 = a.Cliente; //Retorna NULL
            var pessoa2 = a.Cliente.Value; //Retorna o Valor






#480027 - 06/03/2018 13:20:13

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Caramba, que estranho... Não deveria estar assim. Vou tentar fazer um exemplo pra você

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#480100 - 11/03/2018 22:07:16

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 11/03/2018 22:09:24 por CLEVERTON

   Eu ESQUECI de mencionar um detalhe   

O Problema acontece quando eu tento Serializar pelo newtonsoft

Pra resolver, eu coloquei o atributo  [JsonIgnore] no atributo que eu quero ignorar na serialização.

Como o atributo está com modificador virtual, caso eu precise de outro modelo, só é criar e fica moleza.

É porque, eu tenho uma ICollection<Pedido> dentro de Pessoa. e uma Pessoa dentro Pedido.




 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por CLEVERTON em 02/04/2018 14:38:07