Dupliquer une exception de clé d'Entity Framework?

c# entity-framework exception

Question

J'essaie d'attraper l'exception levée lorsque 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 déclenchée lorsque j'essaie d'insérer l'utilisateur dans la base de données est une "UpdateException" - Comment puis-je extraire cette exception pour déterminer s'il s'agit d'une exception en double ou d'une autre?

Réponse acceptée

catch (UpdateException ex)
{
    SqlException innerException = ex.InnerException as SqlException;
    if (innerException != null && innerException.Number == ??????)
    {
        // handle exception here..
    }
    else
    {
        throw;
    }
}

Mettez le nombre correct à ?????? cela correspond à une violation de contrainte unique (je ne la connais pas par cœur).


Réponse populaire

Parce que j'utilise EntityFramework avec C #, j'ai dû apporter un changement mineur à cela - j'espère que cela aidera 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 est survenu parce que j'avais besoin de DbUpdateException au lieu de UpdateException, et mon objet InnerException avait un objet InnerException supplémentaire contenant le nombre dont j'avais besoin ...



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow