0

Je suis en train de coder une application internet MVC5 et j'utilise EF6. J'ai un EditActionResult qui est appelé lorsqu'un objet Asset est édité. J'ai également besoin de mettre à jour d'autres valeurs d'objets lorsqu'un objet Asset est édité. La fonction UpdateAssociatedAssetObjects le fait.EF6 - Il y a déjà un DataReader ouvert associé à cette commande qui doit être fermé en premier

Je reçois l'erreur suivante:

There is already an open DataReader associated with this Command which must be closed first. 

Dans la fonction UpdateAssociatedAssetObjects, à la ligne de code suivante:

if (item.mapMarker.Id == asset.Id) 

Voici le Edit ActionResult:

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Edit(AssetViewModel assetViewModel) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(assetViewModel.asset).State = EntityState.Modified; 
     assetViewModel.asset.lastUpdate = DateTime.Now; 
     if (assetViewModel.asset.linkFromExternalResource) 
     { 
      assetViewModel.asset.webAddress = assetViewModel.webAddress; 
     } 
     else 
     { 
      assetViewModel.asset.webAddress = assetViewModel.filename; 
     } 
     db.Entry(assetViewModel.asset).Property(uco => uco.creationDate).IsModified = false; 
     db.Entry(assetViewModel.asset).Property(uco => uco.userName).IsModified = false; 
     assetService.UpdateAssociatedAssetObjects(db, assetViewModel.asset); 
     await db.SaveChangesAsync(); 
     return RedirectToAction("Index"); 
    } 
    return View(assetViewModel); 
} 

ici est la fonction UpdateAssociatedAssetObjects:

public void UpdateAssociatedAssetObjects(CanFindLocationDatabaseContext db, Asset asset) 
{ 
    foreach (var item in db.mapLocations) 
    { 
     if (item.mapMarker.Id == asset.Id) 
     { 
      item.lastUpdate = DateTime.Now; 
     } 
    } 
} 

Puis-je avoir de l'aide avec ce code?

J'ai essayé de placer la fonction UpdateAssociatedAssetObjects après le await db.SaveChangesAsync() et en utilisant un nouvel objet de contexte de base de données, mais l'erreur se produit toujours.

Merci à l'avance

+0

À quoi ressemble la chaîne de connexion? –

+0

La chaîne de connexion fonctionne. Les objets sont ajoutés et supprimés avec succès. Pensez-vous que le problème serait avec la chaîne de connexion? – user3736648

+0

Peut-être, c'est pourquoi j'ai demandé :) –

Répondre

0

Dans votre méthode de commande que vous ouvrez déjà une connexion db à une entrée d'actifs.

Dans votre méthode UpdateAssociatedAssetObjects, vous essayez d'ouvrir une deuxième lecture de connexion db, alors que vous êtes toujours ouvert. Obtenez le premier objet ou obtenez la liste dans le second objet.

Une autre solution consiste à mettre à jour le db deux fois.

Questions connexes