none
Problemas EF muitas tabelas e obrigando a executar SaveChanges RRS feed

  • Pergunta

  • Boa noite.

    Fiz umas buscas mão não encontrei algo específico para o meu caso, mas se houver me perdoem a pergunta.

    Comecei com umas 20 tabelas e o EF me surpreendeu em diversos fatores, eu que venho de anos e anos do ADO.Net.

    Hoje, 2 anos depois, tenho alguns clientes para meu ERP OnLine e tenho neste momento 134 tabelas.

    Um ponto que em vários lugares funciona:

    Eu crio um objeto PRODUTO, e em outro objeto ITEMPEDIDO eu faço vínculo direto tipo:

    var Item = new ItensPedido();

    Item.Produto = objProduto;

    objContexto.DbItensPedido.Add(Item);

    Perfeito, funciona muito bem.

    Porém hoje minha rotina de faturamento de pedido eu faço:

    Gerar objeto Pedido, ItensPedido.  Depois gerar CtsAReceber. Se houve enntrada já faço a movimentação financeira.  Fora isso tem outras tabelas que são envolvidas (histórico pedido, histórico título a receber, movimentação de estoque, etc).

    Usando um padrão Repository mas que não está muito correto estou tendo problema de instâncias do Context pois ele dá problema pelos objetos não estarem no mesmo Contexto.   Eu então mudei as minhas classes onde eu passava o contexto por parâmetro na construtora e resolveu.

    Bom.. passado um tempo o sistema começou a ficar lento pois o Contexto estava muito grande, 100 tabelas chamando com DbSet<>.  Então eu ví umas dicas e dividi meu contexto por módulos (Faturamento, Estoque, Financeiro, etc).  Tive notável ganho de performance mas agora volto a ter problemas na estrutura do projeto pois tem tabelas envolvidas em mais de um contexto.

    Uma vez ví num link um cara falando que o EF com muitas tabelas não era o ideal, eu deveria procurar outro framework ou usar o ADO.Net padrão (o que não vejo problema).

    Então o que faço?  Minhas tabelas vão continuar aumentando, estou desenvovlendo NFCe (nota fiscal consumidor)e mais tabelas estão chegando.  Posso mesclar EF com ADO.Net numa boa?

    Ah (editei o post), e coloquei OBRIGANDO EXECUTAR SAVECHANTES é que tem momentos, tipo quando fatura um pedido, que ele só para de dar problemas dos vínculos dos objetos se eu chamar um SaveChanges no meio do caminho, porém eu perco o controle transacional todo.

    Obrigado!


    sábado, 1 de novembro de 2014 00:38