Atualização Many to Many?

Estou com uma tabela Many to Many e preciso inserir e atualizar os dados desta tabela, e eu já fiz a inserção, mas na hora de atualizar sempre da erro. O que acontece é que se houver dados anteriores os mesmos são removidos e gostaria que removesse só os dados que serão atualizados.

Observação: estou utilizando o Entity Framework 6.

Segue imagens dos código:

Classe Model:

Classe DAO com o método de atualização Many-To-Many:

    public void atualizar_localpessoa(localpessoa loc_pes)
    {

        using (_db = new projeto_entities())
        {
            using (var trans = _db.Database.BeginTransaction(IsolationLevel.ReadCommitted))
            {

                /*criar duas consultas para retornar os atributos que estou querendo
                 e comparar se possivel com o anterior; Apos isso remover o antigo e adicionar um novo;
                 */
                pessoa _pes                     = new pessoa();
                logradouropvmtpa _pvmtpc        = new logradouropvmtpa();

                pessoabo pesbo                  = new pessoabo();
                logradouropvmtpabo logdpvmtpc   = new logradouropvmtpabo();
                _pes    =   pesbo.consultar_id_pessoa(loc_pes.pes_nr_id);
                _pvmtpc =   logdpvmtpc.consultar_id_local(loc_pes.locl_nr_id);
                //irei adicionar o meu localpesoa antes e salvar na base de dados
                //if (_pes != null && _pvmtpc != null) {
                //    _db.localpessoa.Attach(loc_pes);
                    _db.localpessoa.Add(loc_pes);
                //    _db.SaveChanges();
                //}
                /*
                 * irei verificar meu valores. Tanto pelo id da pessoa como pelo id do local
                 */
                var pes = _db.localpessoa.Where(l => l.pes_nr_id.Equals(loc_pes.pes_nr_id));
                var loc = _db.localpessoa.Where(l => l.locl_nr_id.Equals(loc_pes.locl_nr_id));
                //--encerrar a busca pelas FK's

                foreach (var item in pes)
                {
                    if (item.pes_nr_id.Equals(loc_pes.pes_nr_id))
                    {
                        item.pes_nr_id              = _pes.pes_nr_id;
                        //loc_pes.pes_nr_id           = item.pes_nr_id;
                        _db.localpessoa.Remove(item);
                        //item.pes_nr_id = _pes.pes_nr_id;
         //               _db.Entry(_pes).State    = System.Data.Entity.EntityState.Added;
                    }
                    _db.SaveChanges();
                    break;
                }

                foreach (var item in loc)
                {
                    if (item.locl_nr_id.Equals(loc_pes.locl_nr_id))
                    {
                        item.locl_nr_id             = _pvmtpc.locl_nr_id;
                        //loc_pes.locl_nr_id          = item.locl_nr_id;
                        _db.localpessoa.Remove(item);
                        //item.locl_nr_id=_pvmtpc.locl_nr_id;
           //             _db.Entry(_pvmtpc).State    = System.Data.Entity.EntityState.Added;
                    }
                    _db.SaveChanges();
                    break;
                }
                
                //_db.localpessoa.Add(loc_pes);
              
                trans.Commit();
                _db.SaveChanges();
              
            }
            //--encerra segundo using do BeginTran
        }
        //--encerra primeiro using do Context
    }

Classe de Negócios:

Classe do Controller :

A View depois eu posto.

Quando eu vejo uma aplicação .NET aqui nessa imensidão JAVA, eu fico feliz, mas, ai eu começo olhar os códigos me dá um #medo gigante.

Seu código tem vários problemas:

  • Falta de padrão
  • Chamando thread para atrasar código, porque? e pra que (problema grave)?
  • Nomes com underline, e tudo fora de um padrão especifico, .NET não usa _ (underline) para separar nomes compostos de variáveis só para definir variaveis privadas. (problema grave).

Seguinte não me leve a mau, no mundo .NET não faz assim, precisa verificar seus conceitos e tudo relevante ao desenvolvimento na arquitetura, talvez abrindo um novo questionamento posso te ajudar com padrões de nomes por exemplo.

Mas a sua duvida principal é Many to Many (muitos para muitos com Entity Framework)

Um bom texto:

Projeto esta em fase de teste;
*Thread de 3 segs na minha camada de Negocios; Gosto de trabalhar, assim.
*Padrao MVC. Voce viu as minhas camadas. Como estao trabalhando ?
*Identificacao dos atributos em relacao a minha base de dados e da minha aplicacao. Assim consegui identificar as classes e os atributos mais facilmente. Ou seja como ainda esta em fase de teste. Entao e muito mais rapido. Depois eu terei que ir alterando e analisando melhor os meu codigos.

Sempre utilizo nomes completos dos atributos e classes com o primeiro nome maiusculo.

Irei da uma olhada no que voce me enviou. Tem mais materiais ?

Desde ja agradecido !

Olha sinceramente não, geralmente tiramos duvidas das perguntas, se tiver outras duvidas pode abrir e pergunta novamente, sem problemas, eu fiz vários comentários por achar que não está bom, mas, isso é por conta e risco seu, quero deixar isso no site como forma de alerta aos demais. Nesse mesmo forum tem outros materiais, o que realmente você precisa?