8
votes

Vérifiez si un insert ou la mise à jour a réussi dans l'ensemble de l'entité

dans ado.net, exécutenonquery () "Pour mettre à jour, insérer et supprimer des instructions, la valeur de retour est le nombre de lignes concernées par la commande" ( http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery. ASPX )

dans ef v1, context.savechanges () renvoie "le nombre d'objets dans un état ajouté, modifié ou supprimé lorsque SAVECHANGES a été appelée." ( http://msdn.microsoft.com/en-us/library/bb739065. ASPX )

Veuillez indiquer, lorsque plusieurs entités (ou une seule entité unique) sont ajoutées ou mises à jour au contexte et au contexte.Savechanges () sont appelées, comment vérifier si l'insertion ou la mise à jour réelle a été réussie.

pouvons-nous supposer s'il n'y avait aucune exception que l'insertion (s) ou la) mise à jour a été réussie?

merci


0 commentaires

4 Réponses :


13
votes

Oui, s'il n'y a pas d'exception, vous pouvez supposer que les déclarations sont exécutées avec succès.


0 commentaires

2
votes

Peut-être que ce n'est pas une réponse directe à la question, mais peut aider. Par défaut, toutes les commandes sont encapsulées dans une dbTransaction lorsque la méthode SAVECANGES est appelée ( Julia LERMAN, Cadre d'entité de programmation ). Donc, ou toutes les commandes seront exécutées avec succès ou non. C'est une façon de savoir si l'insertion, la mise à jour ou la suppression a été réussie.


0 commentaires

3
votes

EntityFramework, SAVECHANGESASASYNC () CODE> Retourne un INT STRUT>. Afin que vous puissiez vérifier si c'est > 0 code> ou pas strud>.

Si quelque chose se passe avec SAVECHANGESASAYNC () code> Il retournera le nombre d'effectés rangées et cela signifie si valeur> 0 code> alors vrai fort>. Donc, simplement, vous pouvez avoir ci-dessous Sceneferio: P>

insert strong> p> xxx pré>

update strong> p > xxx pré>

Supprimer strong> p> xxx pré>

et dans vos méthodes, vous pouvez désormais vérifier si ce changement est le succès ou non: p>

pour un simple MVC STRT> SCENERIO: P>

public Task<IActionResult> CreateEntity(EntityModel model)
{
     if(model == null)
            return StatusCode(404);

     var entity = new Entity
     {
          attribute1 = model.attribute1,
          attribute2 = model.attribute3
     };

     var isCreated = await _entityService.CreateEntity(entity);

     if(isCreated)
     {
          //do something and return a view.
     }
     else
     {
         //you can return a status code, or an error view.
     }
}


5 commentaires

Ouais, mais si quelque chose ne va pas, ces méthodes vont bouillir une exception (F.e. dbupdateException), elles renvoient donc toujours true ou lancent une exception. C'est une façon longue de dire: tout va bien quand aucune exception n'est lancée. En outre, avoir des méthodes distinctes pour toutes les actions CUD ne sont pas vraiment utiles lorsque vous travaillez avec des graphiques d'objets. Enregistrer un graphique d'objet peut impliquer à la fois des inserts, des mises à jour et des suppresses. Je préférerais juste faire des affaires, puis appeler Savechanges et laisser EF décider de ce qui devrait être fait. Dans l'ensemble, je ne vois pas beaucoup de mérite dans ce que vous proposez ici.


Je comprends votre point, mais l'auteur vient de demander s'il existe un moyen de vérifier si la "déclaration" est un "succès" ou "échec", de sorte que je l'ai mentionné, c'est juste un moyen simple de réaliser cela. Ceci est juste une petite conversion de l'exemple qui a donné ci-dessus (ADO.NET): La valeur de retour est le nombre de lignes concernées par la commande .


Il vient de demander s'il y a une approche similaire dans EF, cela peut être une mauvaise pratique, mais après tout, à la fin de la journée 1 est plus grand que 0 . Vous avez raison lorsque vous dites retourne vrai ou jette une exception . Mais si la question pose la question suivante: Veuillez indiquer, lorsque plusieurs entités (ou une entité unique) sont ajoutées ou mises à jour au contexte et au contexte.Savechanges () sont appelées, comment vérifier si l'insertion ou la mise à jour réelle a été réussie. Ainsi, dans cette approche, si une ou plusieurs lignes sont effectivement effectuées, alors cela revient - nous pouvons dire ... un succès. J'espère que vous comprenez mon point de vue ici. :)


C'est exactement ce que je le fais dans EF Core, lorsque je veux savoir si quelque chose est mis à jour ou inséré. Content de voir que je ne suis pas le seul.


SAVECANGES peut très bien affecter 0 enregistrements sans avoir des erreurs. La réponse acceptée est la seule réponse correcte à cette question.



-1
votes

Définir la variable Savestatus Var Savestatus = Context.Savechanges ()

Ensuite, vous pouvez savoir si la création a été faite en obtenant la valeur de Savestatus = 1

Dans le cas de "Savestatus = 0", cela signifie qu'aucun enregistrement n'a été créé ou affecté


2 commentaires

Non. SAVECHANGES peut très bien affecter 0 enregistrements sans aucune erreur. La réponse acceptée est la seule réponse correcte à cette question.


Je suis d'accord avec vous, mais si vous voulez vous assurer qu'un enregistrement a été ajouté ou mis à jour, SAVECHANGES devrait renvoyer 1