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.