0
I am developing a sales system. Follow the link: Save Request - ASP.NET MVC
However when finalizing the purchase and saving the data in the bank, I get the following error:
"An Entity Object cannot be referenced by Multiple instances of Ientitychangetracker"
How can I fix this?
public ActionResult SalvarCarrinho()
{
var carrinho = Session["Carrinho"] != null ? (Pedido)Session["Carrinho"] : new Pedido();
contexto.Pedidos.Add(carrinho);
contexto.SaveChanges();
return RedirectToAction("Carrinho");
}
Gives error in this line:
contexto.Pedidos.Add(carrinho);
Complete code of Controller:
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");
}
Now you put the code that is giving problem in the body of the question, please.
– Leonel Sanches da Silva
That’s the code right there.
– Guilherme Vinicius
I believe it is the fact that there is more than one context somewhere. The code is unclear on this. How is the statement of contexts?
– Leonel Sanches da Silva
you want to see the requested classes etc?
– Guilherme Vinicius
No, I want the code of Controller.
– Leonel Sanches da Silva
I did not use the guid because the Iditempedido is generated alone by the database.
– Guilherme Vinicius
I’ve already updated what you asked for.
– Guilherme Vinicius