I'm developing a sales system. Follow the link: Save Request - ASP.NET MVC
But when I finish the purchase and save the data in the database, I get the following error:
"An entity object can not be referenced by multiple instances of IEntityChangeTracker"
How can I resolve this?
public ActionResult SalvarCarrinho()
{
var carrinho = Session["Carrinho"] != null ? (Pedido)Session["Carrinho"] : new Pedido();
contexto.Pedidos.Add(carrinho);
contexto.SaveChanges();
return RedirectToAction("Carrinho");
}
Give an error on this line:
contexto.Pedidos.Add(carrinho);
Controller Full Code :
public ActionResult AdicionarCarrinho(int id)
{
Pedido carrinho = Session["Carrinho"] != null ? (Pedido)Session["Carrinho"] : new Pedido();
var produto= db.Produto.Find(id);
if (produto != null)
{
var itemPedido = new ItemPedido();
itemPedido.Produto = produto;
itemPedido.Qtd = 1;
if (carrinho.ItemPedido.FirstOrDefault(x => x.IdProduto == produto.IdProduto) != null)
{
carrinho.ItemPedido.FirstOrDefault(x => x.IdProduto == produto.IdProduto).Qtd += 1;
}
else
{
carrinho.ItemPedido.Add(itemPedido);
}
carrinho.ValorTotal = carrinho.ItemPedido.Select(i => i.Pedido).Sum(d => d.Preco);
Session["Carrinho"] = carrinho;
}
return RedirectToAction("Carrinho");
}
public ActionResult Carrinho()
{
Pedido carrinho = Session["Carrinho"] != null ? (Pedido)Session["Carrinho"] : new Pedido();
return View(carrinho);
}
public ActionResult Remover(int id)
{
var carrinho = Session["Carrinho"] != null ? (Pedido)Session["Carrinho"] : new Pedido();
var itemExclusao = carrinho.ItemPedido.FirstOrDefault(i => i.IdItemPedido == id);
carrinho.ItemPedido.Remove(itemExclusao);
Session["Carrinho"] = carrinho;
return RedirectToAction("Carrinho");
}
public ActionResult FinalizarCarrinho()
{
var carrinho = Session["Carrinho"] != null ? (Pedido)Session["Carrinho"] : new Pedido();
var id = Convert.ToInt32(Session["IdUsuario"]);
var usuario = db.Usuario.FirstOrDefault(u => u.IdUsuario == id);
carrinho.DtPedido = DateTime.Now;
carrinho.Usuario = usuario;
carrinho.StatusPedido = "esperando pagamento";
carrinho.TipoPag = "boleto";
db.Pedido.Add(carrinho);
db.SaveChanges();
return RedirectToAction("Carrinho");
}