J'utilise Asp.net core Razor engine Entity Framework. Je continue à obtenir l'erreur ci-dessus et à partir de ce que j'ai lu, il se réfère à la db déjà utilisée pour une opération. Je ne suis pas sûr de savoir pourquoi cela se produirait. Est-ce parce que c'est dans une boucle foreach? Quelle serait la solution de contournement? Voici mon codeInvalidOperationException: Une opération est déjà en cours
[HttpGet]
[Route("currentSession")]
public IActionResult CurrentSession()
{
var id = HttpContext.Session.GetInt32("Id");
if(id != null)
{
var user = _context.User.FirstOrDefault(x => x.Id == id);
ViewBag.User = user;
ViewBag.User_Id = id;
ViewBag.Auction = _context.Auction.AsEnumerable();
foreach(var item in ViewBag.Auction)
{
if(item.End_Date < DateTime.Now)
{
var seller_id = (int)item.Id_Of_Seller;
var seller = _context.User.FirstOrDefault(x => x.Id == seller_id); //this is the line that causes the error in the title
var bidder_id = (int)item.Id_Highest_Bid;
var buyer = _context.User.FirstOrDefault(x => x.Id == bidder_id); //this line also causes the same error
buyer.Wallet -= item.Bid;
seller.Wallet += item.Bid;
_context.Auction.Remove(item);
_context.SaveChanges();
}
}
return View("Home");
}
return RedirectToAction("LoginPage");
}
Merci, pourquoi cela a-t-il fonctionné? – Aaron
Étant donné qu'énumérables ne charge pas toutes les données en mémoire mais récupère les données de la base de données en les énumérant via _context et dans la boucle, vous réutilisez _context pour supprimer les données de la même entité en cours d'énumération. L'appel de .LoList() charge la copie des données de l'enchère en premier lieu et ainsi _context n'a qu'une seule opération à effectuer sur l'entité Auction, c'est-à-dire Remove. – vendettamit
AsEnumerable est une action différée et vous effectuez à nouveau quelque chose sur le contexte db à cette étape. C'est la raison pour laquelle vous avez rencontré cette erreur. – Teja