My method responsible for editing is inserting values into the CONSUL_EnciclopediasCONSUL_Promocoes
table instead of editing.
If I have the options x with id = 1 and y id = 2 within the course a with id = 1 and I originally choose the option x , my table gets 1 and 1. If I edit and now I choose the y option, my table holds 1 and 1 and also inserts 1 and 2. >
Domain Encyclopedias
public class CONSUL_Enciclopedias
{
public int ID { get; set; }
public string Nome { get; set; }
public string Descricao { get; set; }
public string PrazoEntrega { get; set; }
public string Banner { get; set; }
public string Foto { get; set; }
public string LinkLoja { get; set; }
public string DataEnvio { get; set; }
public bool Ativo { get; set; }
public virtual ICollection<CONSUL_Promocoes> Promocoes { get; set; }
}
Domain Promotions
public class CONSUL_Promocoes
{
public int ID { get; set; }
public string Nome { get; set; }
public string Foto { get; set; }
public string Descricao { get; set; }
public bool Ativo { get; set; }
public virtual ICollection<CONSUL_Enciclopedias> Enciclopedias { get; set; }
}
My table CONSUL_EnciclopediasCONSUL_Promocoes
gets CONSUL_Enciclopedias_ID
and also CONSUL_Promocoes_ID
My edit method in my Controller Encyclopedia
[CustomActionFilter]
[AcceptVerbs(HttpVerbs.Post)]
public PartialViewResult Edit(int id, CONSUL_Enciclopedias Enciclopedias, FormCollection collection)
{
PromocoesAplicacao bdPromocoes;
EnciclopediasAplicacao bdEnciclopedia;
bdPromocoes = PromocoesAplicacaoConstrutor.PromocoesAplicacaoEF();
bdEnciclopedia = EnciclopediasAplicacaoConstrutor.EnciclopediasAplicacaoEF();
var enciclopedia = bdEnciclopedia.ListarPorId(id.ToString());
var promoBD = bdPromocoes.ListarTodos();
var listaCombo = new List<CONSUL_Promocoes>();
if (!string.IsNullOrEmpty(collection["Promocoes"]))
{
var promos = collection["Promocoes"].ToString().Split(',');
foreach (var promo in promos)
{
listaCombo.Add(promoBD.First(c => c.ID.ToString() == promo));
}
}
Enciclopedias.Promocoes = listaCombo;
bdEnciclopedias.Salvar(Enciclopedias);
return null;
}
Repository
public class EnciclopediasRepositorioEF : IRepositorio<CONSUL_Enciclopedias>
{
private readonly Contexto contexto;
public EnciclopediasRepositorioEF()
{
contexto = new Contexto();
}
public void Salvar(CONSUL_Enciclopedias entidade)
{
if (entidade.ID > 0)
{
var EnciclopediasAlterar = contexto.Enciclopedias.First(x => x.ID == entidade.ID);
EnciclopediasAlterar.PrazoEntrega = entidade.PrazoEntrega;
EnciclopediasAlterar.Banner = entidade.Banner;
EnciclopediasAlterar.Nome = entidade.Nome;
EnciclopediasAlterar.Descricao = entidade.Descricao;
EnciclopediasAlterar.Foto = entidade.Foto;
EnciclopediasAlterar.LinkLoja = entidade.LinkLoja;
EnciclopediasAlterar.Ativo = entidade.Ativo;
EnciclopediasAlterar.DataEnvio = entidade.DataEnvio;
EnciclopediasAlterar.CONSUL_Promocoes = entidade.CONSUL_Promocoes.Select(promo => contexto.Promocoes.FirstOrDefault(y => y.ID == promo.ID)).ToList();
}
else
{
entidade.CONSUL_Promocoes.Select(promo => contexto.Promocoes.FirstOrDefault(y => y.ID == promo.ID)).ToList();
contexto.Enciclopedias.Add(entidade);
}
contexto.SaveChanges();
}
public void Excluir(CONSUL_Enciclopedias entidade)
{
var cartaAlterar = contexto.Enciclopedias.First(x => x.ID == entidade.ID);
contexto.Set<CONSUL_Enciclopedias>().Remove(cartaAlterar);
contexto.SaveChanges();
}
public IEnumerable<CONSUL_Enciclopedias> ListarTodos()
{
return contexto.Enciclopedias.Include(x => x.CONSUL_Promocoes).ToList();
}
public CONSUL_Enciclopedias ListarPorId(string id)
{
int idInt;
Int32.TryParse(id, out idInt);
return contexto.Enciclopedias.Include(x => x.CONSUL_Promocoes).FirstOrDefault(x => x.ID == idInt);
}
}