none
Ajuda com Entity Framework RRS feed

  • Pergunta

  • Boa tarde a todos.

    Estou com um problema ao utilizar o Entity Framework.

    Estou desenvolvendo uma aplicação pequena para controle de atividades onde tenho o seguinte relacionamento, entre outros:

    Demanda ------- Sistema
                    N .. 1

    Quando tento inserir uma demanda com um sistema já existente, ocorre o seguinte erro: "An entity object cannot be referenced by multiple instances of IEntityChangeTracker".

    Estou usando uma implementação em n camadas, com facade/DAL, onde na DAL crio métodos básicos, como abaixo:

    DemandaDAO
            public bool? inserir(Demanda _objeto) 
            { 
                try 
                { 
                    using (AtividadeEntities2 db = new AtividadeEntities2()) 
                    {                     
                        db.AddToDemanda(_objeto); 
                        return db.SaveChanges() > 0; 
                    } 
                } 
                catch (Exception) 
                { 
                    return null
                } 
            } 


    SistemaDAO
            public Sistema recuperar(short _id) 
            { 
                try 
                { 
                    using (AtividadeEntities2 db = new AtividadeEntities2()) 
                    { 
                        var resultado = db.Sistema.Where(s => s.IdSistema == _id).First(); 
                        return resultado; 
                    } 
                } 
                catch (Exception) 
                { 
                    return null
                } 
            } 



    e na camada de apresentação faço isso:

               
                AtividadeFacade fachada = new AtividadeFacade();            
     
                Demanda objNovo = new Demanda() 
                { 
                    Ordem = 2, 
                    DataAtribuicao = DateTime.Now, 
                    GrauComplexidade = (byte)TipoComplexidade.Alta, 
                    Prioridade = (byte)TipoPrioridade.Alta, 
                    Descricao = "Teste de Demanda 2"
                    Resumo = "Demanda de Teste 2"
                    Sistema = fachada.recuperarSistemaPorID(1); 
                }; 
     
                bool? daoResult = fachada.inserir(objNovo); 


    Então, quando passa pelo db.SaveChages(), ocorre aquele erro q coloqui acima.

    Algúem aí tem alguma idéia do que causa esse erro?

    Desde já agradeço.

    Fabio
    quinta-feira, 12 de fevereiro de 2009 17:58

Todas as Respostas

  • Olá Fábio, gostaria de saber se encontrou solução para este problema, pois, estou também passando pela mesma dificuldade. Não consigo gravar em tabelas que possuem chave estrangeira. Tá complicado viu..rss Dá uma força aí, valeu.
    segunda-feira, 13 de abril de 2009 18:23
  • Não sou especialista em Entity Framework, mas acho que o problema é que você em cada método cria um novo objeto de contexto (conexão):

    using (AtividadeEntities2 db = new AtividadeEntities2()) 

    Em um sistema que tenho que fiz recentemente, eu tinha problemas quando criava mais de um objeto de contexto. Tenta fazer isso usando sempre o mesmo objeto. Por exemplo os métodos inserir e recuperar usando o mesmo objeto de contexto. Você pode usar uma factory para controlar a criação ou mesmo um singleton. Ai depois de fazer todas as atividades você chama o "SaveChanges".


    Espero ter me expressado bem =)
    quarta-feira, 22 de abril de 2009 14:58