I have this function:
foreach (var item in obj.valores)
{
var ver = db.ProdutosFornecedores.Where(r => r.ProdutoID == item.ProdutoID && r.FornecedorID == item.FornecedorID).Select(r => r.Id).Single();
if (ver == 0)
{
ProdutosFornecedores a = new ProdutosFornecedores();
a.FornecedorID = item.FornecedorID;
a.ProdutoID = item.ProdutoID;
db.Add(a);
db.SaveChanges();
}
}
return Json(new { resultado = 1 });
It gets the data from the table, and includes in the database, correctly, however I want it to check with the database data.
Example, the database has id 1 and 2, and I'm including 2 and 4, so I need it to delete the 1, continue the 2, and include the 4.
I thought of deleting all and adding again, but I think it's something unnecessary, it's just a matter of dealing, I just can not think of the best way to do this, because after the result is done submit
.
I came up with these data:
foreach (var item in obj.valores)
{
var listaAtual = db.ProdutosFornecedores.Where(r => r.ProdutoID == item.ProdutoID).Select(r => r.FornecedorID).ToList();
var novaLista = obj.valores.Select(a => a.FornecedorID).ToList();
var remover = listaAtual.Where(a => !novaLista.Contains(a));
var adicionar = novaLista.Where(a => !listaAtual.Contains(a));
foreach (var c in remover)
{
var remove = db.ProdutosFornecedores.Single(d => d.ProdutoID == item.ProdutoID && d.FornecedorID == c);
if (remove != null)
{
db.ProdutosFornecedores.Remove(remove);
db.SaveChanges();
}
}
foreach (var c in adicionar)
{
ProdutosFornecedores a = new ProdutosFornecedores();
a.FornecedorID = c;
a.ProdutoID = item.ProdutoID;
db.Add(a);
db.SaveChanges();
}
}
But it's not working the right way, what's being done wrong? If the id = 1 already exists, and in the table I include id = 2, it excludes 1 and includes only 2, I need to stay 1, and include 2.