none
Entity Framework 4 - Poco atualizar relacionamento no Update RRS feed

  • Pergunta

  • Bom, 

    Eu estou usando entity framework 4 Poco e tenho no meu dominio as classes:

     

    public class Livro{
    
            public override int Id { get; protected set; }
            public string Titulo { get; set; }
            public string ISBN { get; set; }
            public IList<Autor> Autores { get; set; }
            public Categoria Categoria { get; set; }
            public string Editora { get; set; } 
            public string Observacoes { get; set; }
            public string Imagem { get; set; }
            public Locacao Locacao { get; internal set; }<br/>
    
      public class Locacao : Entidade<Locacao, int>
      {
        protected Locacao() { }
    
        public override int Id { get; protected set; }
        public DateTime DataLocacao { get; protected set; }
        public DateTime DataDevolucao { get; set; }
        public Livro Livro { get; protected set; }
        public Usuario Usuario {get; protected set;}
    }
    

    Eu omiti o construtor das classes mais é isso.

    No meu .edmx eu relacionei meu livro com minha locação sendo 0..1 e minha locacao sendo 1, log a locação tem que ter um livro já o livro não precisa ter uma locação. Isso pq qdo eu criar um livro ele nao tem q ter uma locação mais quando eu locar o livro ele precisa ter uma referencia pra q locação ele foi associado. O problema é que o EF não esta atualizando a tabela de livro com o id da locação, na locação esta tudo certo. Quando eu seto em livro o objeto locação mesmo, assim o EF nao atualiza o status pra modified fica como se nao tivesse alteração e mesmo se eu forço o status para modified ele tb nao atualiza o campo.

    O que pode ser o problema?

     

     


    Diego Dias - www.2dsolucoes.net
    sexta-feira, 25 de fevereiro de 2011 16:12

Respostas

  • O ObjectContext só irá atualizar a mudança de referencia se o ObjectContext estiver vivo e rastreando as modificações na entidade. Assim:

    using( ObjectContext context = new ObjectContext() ){

    Locacao locacao = contex.Locacoes.FirstOrDefault();

    locacao.Livro = context.Livros.FirstOrDefault(livro => livro.Titulo = "Design Patterns");

    context.SaveChanges();

    }

    Assim funciona pois o contexto está rastreando as modificações das entidades anexas ao contexto.

    Se uma determinada entidade mudar suas referências e o contexto ao qual ela estava anexada não estiver mais vivo, o mesmo não tem suas referencias atualizadas quando for reanexadas a outro contexto. Se você buscar a locação sobre um contexto dentro de um using, o livro sobre outro contexto dentro de um using, ao trabalhar alguma modificação de referencia anexe ambas entidades a um terceiro contexto antes de faze-lo, pois dessa forma as entidades estão sendo rastreadas quanto a modificação.



    Atenciosamente, Paulo R. Pereira de Souza
    http://paulosouza.net
    E-mail: paulorpereirasouza@hotmail.com. twitter facebook linkedin
    domingo, 27 de fevereiro de 2011 18:35