none
Problemas com EntityFramework em uma arquitetura SOA em N-Camadas RRS feed

  • Pergunta

  • Pessoal, já estou há algum tempo tentando solucionar alguns problemas com o EntityFramework em uma arquitetura SOA em N-Camadas.

     

    Vou montar um cenário ser mais prática a visualização dos problemas !!!

     

    Entidades
      . Computador
      . ComputadorStatus

     

    Sendo que...


    Code Snippet

     

      public class Computador

      {
        public int ComputadorId

        {

          get { ... }

          set { ... }

        }

     

        public string ComputadorDesc

        {

          get { ... }

          set { ... }

        }


        public ComputadorStatus computadorStatusId

        {

          get { ... }

          set { ... }

        }

      }

     

      public class ComputadorStatus

      { 

        public int ComputadorStatusId

        {

          get { ... }

          set { ... }

        }


        public string ComputadorStatusDesc

        {

          get { ... }

          set { ... }

        }

      }

     

     

    Logo temos um relacionamento 1:n

     

    ---------------------

     

    1. Problema ao Inserir.

     

    Code Snippet

     

      Computador comp = new Computador();

     

      comp.ComputadorDesc = "Novo Computador";

      comp.ComputadorStatus = ??????

     

      // A solução menos "feia" que tive até então foi:

     

      comp.ComputadorStatusReference.EntityKey =
          new EntityKey("Entities.ComputadorStatus", "ComputadorStatusId", 1);

     

      process.InserirComputador(comp);

     

     

    ... láaaa na camada de acesso a dados teriamos o contexto para finalmente salvar.

     

    Code Snippet

     

      context.AddToComputadors(comp);
      context.SaveChanges();

     

     

    Isto funciona!!!

    Mas não me agradou nem um pouco!

     

    ---------------------

     

    2. Problema ao Atualizar.


    Code Snippet

     

      Computador comp =
          (Computador)this.BindingSourceComputadores.Current;

     

      comp.ComputadorDesc = "Descrição do Computador...";

     

      // Utilizei um EFExtesion para ter essa extensão do método SetKey()

     

      comp.ComputadorStatusReference.SetKey(2);

     

      process.AtualizarComputador(comp);

     

     

    ... láaaa na camada de acesso a dados teriamos o contexto para finalmente salvar.


    Code Snippet

     

      // Utilizei um EFExtesion para ter essa extensão do método GetKey()


      int compStatusId =
          (int)comp.ComputadorStatusReference.GetKey();

     

      context.Attach(comp.ComputadorStatus);
      context.Attach(comp);

     

      comp.ComputadorStatusReference.SetKey(compStatusId);

     

      context.SaveChanges();

     

     

     

    Novamente ... Isto funciona!!!

    Mas não me agradou nem um pouco!

     

    ---------------------

     

    Segue o Link do EFExtension que utilizei.

     

     

    http://code.msdn.microsoft.com/EFExtensions/Release/ProjectReleases.aspx?ReleaseId=1399

     

    Comentários finais!!!

     

    Alguém tem alguma idéia de como fazer isto que não seja essa gambiarra toda que acabei fazendo pra fazer funcionar ????????????

     

    Não estou utilizando o EntityFramework por este motivo....

     

    Optei pelo uso de DTO no projeto, mas ainda não desisti do EntityFramework, ainda vejo uma luz no fim do túnel.

     

    Abraços!!!

    quarta-feira, 28 de janeiro de 2009 00:46

Respostas

Todas as Respostas