ATÉ QUE PONTO VALE A PENA UTILIZAR O EF?

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

ATÉ QUE PONTO VALE A PENA UTILIZAR O EF?

C#

 Compartilhe  Compartilhe  Compartilhe
#484713 - 01/10/2018 14:08:44

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


Boa tarde!

Irei iniciar um projeto semana que vem e estou definindo quais ferramentas irei utilizar.
E agora cheguei na parte da camada de dados.

Estou um pouco relutante com o Entity Framework. Apesar de muito se falar dele, que é ótimo, etc... Minhas experiências com ele não foram tão maravilhosas.
Talvez o que mais me tenha frustrado é a parte trabalhosa de atualização de objetos complexos (filhos, dos filhos, dos filhos).

Exemplo:
    https://stackoverflow.com/questions/27176014/how-to-add-update-child-entities-when-updating-a-parent-entity-in-ef


Eu criei uma solução baseada em Reflection para trabalhar por mim.
Basicamente ele verifica as propriedades de chave primária e verifica se estão com valor, se tiverem, serão atualizadas. Se não tiverem serão inseridas.
Se houver na lista antiga (que recuperei do banco de dados) e não houver no novo objeto, eu simplesmente excluo da lista.  (Apesar de que geralmente isso não é usado, pois uso apenas exclusão lógica).
Se for uma lista, ele cria uma recursão e começa tudo de novo para cada item.

Mas isso me fez pensar. O EF já não é conhecido por ser muito rápido, e eu ainda tive que utilizar uma solução baseada em Reflection com recursividade adicionando mais processamento. Além disso, acredito que o EF já deveria ter uma opção para isso. Talvez eu desconheça, mas não encontrei lugar algum.


Além das atualizações trabalhosas (ou usando Reflection) tem a questão de consultas complexas também.

Estive estudando o Dapper, mas é basicamente um ORM que a gente está cansado de fazer utilizando Reflection também. Apesar de ser comôdo, também não é mágico.


Como vocês estruturam sua camada de dados?


Eu vejo as seguintes possibilidades:


Faço um ORM - Os contras dessa solução é que eu perderia alguns dias para fazer algo, além disso, pessoas que poderiam entrar depois no projeto teriam uma curva maior de aprendizado por não ser uma solução conhecida do mercado;

Faço uma camada de dados híbrida utilizando EF para persistência e consultas simples e Dapper para consultas complexas;

Faço tudo utilizando EF e as consultas complexas deixo como Procedure (apesar de eu acabar perdendo a abstração);


Agradeço cada opinião!

Att,

"Cansei de frases intelectuais" - Eu mesmo


#484715 - 01/10/2018 14:16:57

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


Membro da equipe
Você pode fazer toda e qualquer consulta usando expressões Lambda ou até mesmo uma implementação fluent de uma camada mais abstrata. Use EF(que é também um ORM). Ainda mais se for usar um approach Code First

_______________________________________________________________________
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!


#484719 - 01/10/2018 18:30:07

MRSILVA
MARINGA
Cadast. em:Julho/2015


Olá.

Aproveitando o tópico.

Alguém pode me indicar algum tutorial ou curso sobre WEBAPI com EF  pode ser pago também.

Desde já agradeço.



#484720 - 01/10/2018 18:55:58

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


Membro da equipe
Citação:
:
Olá.

Aproveitando o tópico.

Alguém pode me indicar algum tutorial ou curso sobre WEBAPI com EF  pode ser pago também.

Desde já agradeço.

Aprenda cada um deles separadamente primeiro. Assim que entender bem ambos, você vai poder fazer a junção você mesmo.

_______________________________________________________________________
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!


#484721 - 01/10/2018 20:16:02

MRSILVA
MARINGA
Cadast. em:Julho/2015


Obrigado Kerplunk

Já utilizo EF nos meus projetos, agora estou buscando aprender WEBAPI.




#484724 - 01/10/2018 21:41:49

MRSILVA
MARINGA
Cadast. em:Julho/2015


Última edição em 01/10/2018 21:43:31 por MRSILVA

Kerplunk.

Tinha esquecido da sua série.
https://www.youtube.com/watch?v=WYmJEI4M2Pk

Obrigado!.




#484734 - 02/10/2018 13:12:03

LVFIOROT
SERRA
Cadast. em:Março/2012


aqui tambem tem um conteudo legal!

https://www.codeproject.com/Articles/1262045/Learning-Entity-Framework-Day-3-ASP-NET-Web-API-2




#484753 - 03/10/2018 12:54:48

LEANDROBTOS
VIRADOURO
Cadast. em:Agosto/2009


Olá!

Em meus projetos utilizo uma camada híbrida e tenho obtido um bom resultado!

- EntityFramework para inclusão e alteração de objetos
- Dapper com Slapper.AutoMapper para as consultas.

Obs: O Slapper resolve de uma melhor forma (meu ponto de vista) o mapeamento de objetos complexos.

Se ajudar, posso lhe mostrar via skype (compartilhamento de tela) como utilizo!

[]´s

_______________________________________________________
Estamos aqui para fazer alguma diferença no universo, se não, porque estar aqui?
Steve Jobs


#484771 - 04/10/2018 07:18:45

ANGELOATA
ARACATUBA
Cadast. em:Junho/2009


Citação:
:
Olá!

Em meus projetos utilizo uma camada híbrida e tenho obtido um bom resultado!

- EntityFramework para inclusão e alteração de objetos
- Dapper com Slapper.AutoMapper para as consultas.

Obs: O Slapper resolve de uma melhor forma (meu ponto de vista) o mapeamento de objetos complexos.

Se ajudar, posso lhe mostrar via skype (compartilhamento de tela) como utilizo!

[]´s


Gostei dessa dica... pois tenho usando muito stored procedure para resolver esse tipo de situação e com essa dica... consigo resolver tudo via codigo....




#484843 - 08/10/2018 12:16:41

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


Primeiramente, desculpem a demora para responder. Estou sem computador em casa, então só me resta acessar aqui no trabalho.

Citação:
Você pode fazer toda e qualquer consulta usando expressões Lambda ou até mesmo uma implementação fluent de uma camada mais abstrata. Use EF(que é também um ORM). Ainda mais se for usar um approach Code First


E como você faz a atualização de objetos complexos? Filhos, com filhos, com filhos...  Você cria um método e vai fazer o loop ou usa uma solução baseada em Reflection? E por que?


Citação:
Em meus projetos utilizo uma camada híbrida e tenho obtido um bom resultado!

- EntityFramework para inclusão e alteração de objetos
- Dapper com Slapper.AutoMapper para as consultas.

Se ajudar, posso lhe mostrar via skype (compartilhamento de tela) como utilizo!


Obrigado Leandro! Antes de desperdiçar seu tempo, irei estudar aqui para ver se consigo entender. Qualquer coisa postarei no fórum para me ajudar, tudo bem? Muito obrigado!



"Cansei de frases intelectuais" - Eu mesmo


#484846 - 08/10/2018 13:27:25

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


Membro da equipe
Você instancia um objeto e pode alterar qualquer filho da maneira que quiser, depois basta dar um SaveChages que tudo será refletido no banco.

_______________________________________________________________________
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!


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


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário