J'essaye d'attraper l'exception levée quand j'insère un utilisateur déjà existant avec le nom d'utilisateur donné dans ma base de données. Comme le titre l'indique, j'utilise EF. La seule exception qui est lancée lorsque j'essaie d'insérer l'utilisateur dans db est une "UpdateException" - Comment puis-je extraire cette exception pour identifier si c'est une exception en double ou autre chose?Exception de clé en double d'Entity Framework?
Répondre
catch (UpdateException ex)
{
SqlException innerException = ex.InnerException as SqlException;
if (innerException != null && innerException.Number == ??????)
{
// handle exception here..
}
else
{
throw;
}
}
Mettre le nombre correct à ??????
qui correspond à une violation de contrainte unique (je ne sais pas à partir du haut de ma tête).
Parfait :) - Cependant .. J'ai juste essayé d'attraper le ErrorCode et il dit que le code d'erreur pour une entrée en double est -2146232060 qui me semble un peu étrange? – ebb
Mon mauvais .. utilisé errorCode à la place. Merci :) – ebb
Pour référence future: [2601] (http://msdn.microsoft.com/en-us/library/aa258747 (v = sql.80) .aspx) est une violation de contrainte unique (pour SQL Server). – kamranicus
maintenant en C# 6.0, vous devriez être en mesure de faire quelque chose comme ceci:
catch (UpdateException ex) when ((ex.InnerException as SqlException)?.Number == ??????)
{
// Handle exception here
}
Parce que j'utilise EntityFramework avec C#, je devais faire un changement mineur à cette question - espérons que cela aide tout le monde .. .
try
{
await db.SaveChangesAsync();
}
catch (DbUpdateException ex)
{
SqlException innerException = ex.InnerException.InnerException as SqlException;
if (innerException != null && (innerException.Number == 2627 || innerException.Number == 2601))
{
//your handling stuff
}
else
{
throw;
}
}
mon problème était dû au fait que je avais besoin DbUpdateException au lieu de UpdateException, et mon objet InnerException avait un objet InnerException supplémentaire qui contenait le numéro que je avais besoin ...
Merci, ceci a été utile! Je vais l'utiliser, mais avec un contrôle nul supplémentaire sur la ligne 7; tel qu'écrit, le bloc catch lancera une exception NullReferenceException si ex.InnerException (c'est-à-dire la première InnerException imbriquée) est null. –
Je pense que c'est mieux si vous empêchez l'exception de se produire. Si possible avec votre code, je ferais ce qui suit:
Lorsque vous utilisez framework d'entité, la meilleure chose à faire est d'essayer d'abord d'obtenir l'entrée qui vous causera le problème, avec SingleOrDefault de LINQ. Maintenant, vous pouvez mettre à jour l'entité obtenue avec l'instance que vous vouliez insérer, vous garantissant un numéro d'identification avec auto-incrémentation si vous l'utilisez. Si SingleOrDefault est null, vous pouvez ajouter votre entité en toute sécurité.
exemple de code:
public override void AddOrUpdate(CustomCaseSearchCriteria entity)
{
var duplicateEntityCheck = GetSingleByUniqueConstraint(entity.UserCode, entity.FilterName);
if (duplicateEntityCheck != null)
{
duplicateEntityCheck.Overwrite(entity);
base.Update(duplicateEntityCheck);
}
else
base.Add(entity);
}
public virtual CustomCaseSearchCriteria GetSingleByUniqueConstraint(string userCode, string filterName)
{
return GetAllInternal().SingleOrDefault(sc => sc.UserCode == userCode && sc.FilterName == filterName);
}
- 1. Fausse erreur de clé en double dans l'application Entity Framework
- 2. WebClient.UploadValues Clé en double
- 3. Conversion d'une clé de dictionnaire en double
- 4. HibernateTemplate Save Not Throwing Exception lors de la tentative d'insertion d'une ligne de clé en double
- 5. Fusion JPA échoue en raison de la clé en double
- 6. Exception au sujet clé
- 7. MySQL Insérer le double clé
- 8. Insertion de clé MySQL en double avec chaîne ajoutée
- 9. Postgres csv importation erreur de clé en double?
- 10. Double clé de frappe par SendKeys
- 11. question clé en double avec Spring et Hibernate - assistance nécessaire
- 12. primaykey et une exception de clé étrangère?
- 13. framework d'entité - obtention d'une exception null à l'aide de la clé étrangère
- 14. contenu en double et mot-clé dans l'URL
- 15. erreur NHibernate (Impossible d'insérer clé en double avec l'index unique)
- 16. Création d'une collection à double clé
- 17. Entity Framework EntityKey/Problème de clé étrangère
- 18. Entity Framework EntityKey/Problème de clé étrangère
- 19. Exception NullPointer en Java
- 20. Exception de transtypage invalide .NET sur double division
- 21. Résultat en double
- 22. C# Compact Framework Exception non pris en charge sur Math.Sinh
- 23. Erreur fatale: exception Zend_Db_Adapter_Exception dans Zend Framework
- 24. Des ID en double sont générés en violation des contraintes de clé primaire
- 25. Soumission de formulaire en double au printemps
- 26. entity-framework une table sans clé unique
- 27. Entity Framework filter sur la clé étrangère
- 28. ADO.NET Entity Framework - CRUD clé primaire composite
- 29. Conversion de 5.0.27 à 5.1.41, obtention d'erreurs de clé en double (1062)
- 30. champ d'enregistrement en double mysql
comme toute exception, regardez les InnerException pour connaître les détails de l'erreur exacte. – RPM1984