Usuário com melhor resposta
Relacionamento entre classes

Pergunta
-
Cenário:
Tenho duas classes, uma classe evento e uma classe sala e um relacionamento entre elas
Ao instanciar uma a classe sala, precisa pegar o nome do evento, que esta na classe Evento, como uma propriedade..
Devo trabalhar da maneira abaixo, instanciando a classe Evento dentro da classe sala como uma propriedade?1 public Evento Evento 2 { 3 get 4 { 5 if(eventoPai == null) 6 eventoPai = new Evento(99); //aqui eu instancio a classe evento.. 7 8 return eventoPai; 9 } 10 } 11 12
para recuperar o nome do evento:1 Sala sala = new Sala(); 2 string evento = sala.Evento.Nome
Alguma outra sugestão de como trabalhar com relacionamento entre as classes?
obrigado
Respostas
-
Olá Andre,
o conceito de lazy load seria perfeito para o seu caso, mas você teria que codificar tudo isso.
Utilizando qualquer sistema ORM facilitaria isso para você. Na minha opinião, nHibernate está mais maduro que o Linq to Entities, apesar dos dois apresentarem mecanismos para Lazy Load. No Linq to Entities é um pouco mais chato, porém é possível.
Abraços.
André Nobre- Sugerido como Resposta André BaltieriMVP quinta-feira, 2 de abril de 2009 18:20
- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
Concordo com o André quanto o NHibernate ser bem mais maduro. Além de implementar melhor "Ignorance Persistence", e Lazy Load, ele não tem problemas quanto a serialização. No caso do Linq quando temos um relacionamento bidirecional existe um problema na serialização do linq. (Tendo os seus workarounds).Outro ponto que vale lembrar, é vc pode definir a navegabilidade das tuas associações, ou seja:Para o caso Categoria 1 - N ProdutosNão necessariamente precisaremos ter essa coleção de produtos em categoria. Se você sempre utilizar apenas Produtos estão em Categoria X.
- Sugerido como Resposta André BaltieriMVP quarta-feira, 8 de abril de 2009 17:43
- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
Depende um pouco de qual contexto estas classes estão.
Estou supondo do modo + convencional, onde sejam classes referentes a entidades de negócio. Sendo assim, na classe sala, criaria uma propriedade chamada Eventos (que é uma List<Evento> associados a esta sala) e uma propriedade do mesmo tipo.
No Get desta propriedade, utilizaria uma técnica chamada Lazy Load, que é o seguinte. Se o atributo List<Evento> estiver nulo, consulto a base de dados, carrego todos os eventos associados a esta classe e retorno a lista preenchida.
Para pegar o nome, pegaria sala.Eventos[0].Nome;
Até +,
Bruno Gallego
Bruno Gallego - Se este poste foi útil, por favor, classifique- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
Bruno, uma dúvida que tenho à um tempo.
Caso eu tenha por exemplo a seguinte hierarquia:
- Campeonato
+ Time
+ Jogador
Onde no campeonato tenho uma lista de times e cada time tem uma lista de jogadores.
Vc carregando o campeonato, já carregaria todos os times e jogadores?
Ou faria por partes?
Pois imagina se tiver 1000 time, cada um com +- 22 jogadores.
Não teria um estouro de memória?
Abraços
Inside .NET - O portal do desenvolvedor .NET
http://www.insidedotnet.com.br/
andre.baltieri@insidedotnet.com.br- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
Olá Andre,
entrando de gaiato na conversa :), não obrigatóriamente haverá estouro de memória. Porém, seria uma melhor prática utilizar uma abordagem do tipo Lazy Load (http://martinfowler.com/eaaCatalog/lazyLoad.html).
Abraços.
-- André Nobre
André Nobre- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
Fala André, blza?
Então cara..
O problema é quando se tem uma massa muito grande de dados..
Pesquisando descobri q o nHibernate tem um controle para ver quão profundo vc quer descer na estrutura.. Pai > FIlho > Neto etc..
Na verdade neste novo sistema gostaria de utilizar LINQ To Entities..
O que acha?
Abraços
Inside .NET - O portal do desenvolvedor .NET
http://www.insidedotnet.com.br/
andre.baltieri@insidedotnet.com.br- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
Caros, lembrando apenas que o NHibernate agora possui Linq to NHibernate. Ainda não testei, mas pela qualidade das coisas que o Ayende faz, é bem promissor.Como funciona:Poderiamos usar Linq com NHibernate antes, entretanto as consultas seriam feitas em memória apenas, com o Linq to Sql, suas consultas Linq serão transformadas em Critérios e executadas pelo Nhibernate (ISession ), ou sejam viram consultas Nhibernate e posteriormente Sql. Vale acompanhar enquanto o Entity versão 2 não sai.
Lobo Junior Analista de Sistemas http://alcateiadigital.blogspot.com/- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
Todas as Respostas
-
Depende um pouco de qual contexto estas classes estão.
Estou supondo do modo + convencional, onde sejam classes referentes a entidades de negócio. Sendo assim, na classe sala, criaria uma propriedade chamada Eventos (que é uma List<Evento> associados a esta sala) e uma propriedade do mesmo tipo.
No Get desta propriedade, utilizaria uma técnica chamada Lazy Load, que é o seguinte. Se o atributo List<Evento> estiver nulo, consulto a base de dados, carrego todos os eventos associados a esta classe e retorno a lista preenchida.
Para pegar o nome, pegaria sala.Eventos[0].Nome;
Até +,
Bruno Gallego
Bruno Gallego - Se este poste foi útil, por favor, classifique- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
-
Bruno, uma dúvida que tenho à um tempo.
Caso eu tenha por exemplo a seguinte hierarquia:
- Campeonato
+ Time
+ Jogador
Onde no campeonato tenho uma lista de times e cada time tem uma lista de jogadores.
Vc carregando o campeonato, já carregaria todos os times e jogadores?
Ou faria por partes?
Pois imagina se tiver 1000 time, cada um com +- 22 jogadores.
Não teria um estouro de memória?
Abraços
Inside .NET - O portal do desenvolvedor .NET
http://www.insidedotnet.com.br/
andre.baltieri@insidedotnet.com.br- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
Olá Andre,
entrando de gaiato na conversa :), não obrigatóriamente haverá estouro de memória. Porém, seria uma melhor prática utilizar uma abordagem do tipo Lazy Load (http://martinfowler.com/eaaCatalog/lazyLoad.html).
Abraços.
-- André Nobre
André Nobre- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
Fala André, blza?
Então cara..
O problema é quando se tem uma massa muito grande de dados..
Pesquisando descobri q o nHibernate tem um controle para ver quão profundo vc quer descer na estrutura.. Pai > FIlho > Neto etc..
Na verdade neste novo sistema gostaria de utilizar LINQ To Entities..
O que acha?
Abraços
Inside .NET - O portal do desenvolvedor .NET
http://www.insidedotnet.com.br/
andre.baltieri@insidedotnet.com.br- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
Olá Andre,
o conceito de lazy load seria perfeito para o seu caso, mas você teria que codificar tudo isso.
Utilizando qualquer sistema ORM facilitaria isso para você. Na minha opinião, nHibernate está mais maduro que o Linq to Entities, apesar dos dois apresentarem mecanismos para Lazy Load. No Linq to Entities é um pouco mais chato, porém é possível.
Abraços.
André Nobre- Sugerido como Resposta André BaltieriMVP quinta-feira, 2 de abril de 2009 18:20
- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
Obrigado André.
Eu estava afim de implementar LINQ To Entities, mas creio que o nHibermate é mais maduro e será mais fácil de implementar.
Abraços
Inside .NET - O portal do desenvolvedor .NET
http://www.insidedotnet.com.br/
andre.baltieri@insidedotnet.com.br -
Concordo com o André quanto o NHibernate ser bem mais maduro. Além de implementar melhor "Ignorance Persistence", e Lazy Load, ele não tem problemas quanto a serialização. No caso do Linq quando temos um relacionamento bidirecional existe um problema na serialização do linq. (Tendo os seus workarounds).Outro ponto que vale lembrar, é vc pode definir a navegabilidade das tuas associações, ou seja:Para o caso Categoria 1 - N ProdutosNão necessariamente precisaremos ter essa coleção de produtos em categoria. Se você sempre utilizar apenas Produtos estão em Categoria X.
- Sugerido como Resposta André BaltieriMVP quarta-feira, 8 de abril de 2009 17:43
- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41
-
É, LINQ To Entities tá ____.
Só encontro os mesmo exemplos de sempre.
o jeito vai ser partir para Spring.NET ou NHibernate, n vou ter mais tempo para analisar e aprender linq para este projeto.
Obrigado pessoal.
Abraços
Inside .NET - O portal do desenvolvedor .NET
http://www.insidedotnet.com.br/
andre.baltieri@insidedotnet.com.br -
Caros, lembrando apenas que o NHibernate agora possui Linq to NHibernate. Ainda não testei, mas pela qualidade das coisas que o Ayende faz, é bem promissor.Como funciona:Poderiamos usar Linq com NHibernate antes, entretanto as consultas seriam feitas em memória apenas, com o Linq to Sql, suas consultas Linq serão transformadas em Critérios e executadas pelo Nhibernate (ISession ), ou sejam viram consultas Nhibernate e posteriormente Sql. Vale acompanhar enquanto o Entity versão 2 não sai.
Lobo Junior Analista de Sistemas http://alcateiadigital.blogspot.com/- Marcado como Resposta Wagner dos Santos VasconcellosModerator quarta-feira, 30 de março de 2011 11:41