2014-07-25 4 views
6

J'ai mis la méthode SaveChanges() à l'intérieur d'un bloc try/catch, mais je n'ai pas pu saisir SqlExeption.Pourquoi je ne peux pas attraper SqlException sur la méthode SaveChanges() de Entity Framework

try 
{ 
    db.SaveChanges(); 
} 
catch (Exception ex) 
{ 
} 
+2

Quand et comment les déclencher jeter un oeil Le comportement souhaité est expliqué et évidente. Il y a une déclaration de problème claire. Curieux de savoir pourquoi cela a été rejeté ... – maplemale

+2

J'appelle BS en fermant ce sujet. il est EVIDEMMENT sur le sujet et a même un exemple de code montrant quel est le comportement attendu. "Je souhaite que nous puissions rejeter ceux qui ont voté pour le fermer. –

+0

devrait rouvrir et attribuer la réponse acceptée @usr –

Répondre

3

Vous ne pouvez pas attraper SqlException parce qu'il est pas jeté directement, il est défini comme Exception interne du DbUpdateException. Entity Framework est une abstraction de travailler avec les bases de données, il ne dépend pas directement de la technologie de base de données.

Jetez un oeil sur les exceptions lancées par DbContext.SaveChanges()

10

SqlException est classe System.Data.SqlClient.SqlException il est donc normal que vous ne pouvez pas attraper cette exception Le EntityFramework DbContext.SaveChanges Method() peut jeter les exceptions suivantes uniquement en tant que MSDN

DbUpdateException 
DbUpdateConcurrencyException  

DbEntityValidationException 

NotSupportedException 

ObjectDisposedException 


InvalidOperationException  

vous pouvez donc faire quelque chose comme ceci par exemple

try 
{ 
    db.SaveChanges(); 
} 
catch (DbUpdateException ex) 
{ 
} 
catch (DbUpdateConcurrencyException ex) 
{ 
} 

Plus
Les exceptions mentionnées ci-dessus sont des exceptions entité cadre sur mesure qui ne EF est responsable sur au Implementing custom exceptions

+0

Je ne sais pas pourquoi cette question a été fermée, il est évident à partir des réponses qu'il a une réponse facilement identifiable, donc c'était une bonne question si simple. ce que je fini par faire pour se rendre à l'erreur sql racine pour mon ui catch (Exception ex) { while (ex.InnerException! = Null) ex = ex.InnerException; spanError.Text = ex.Message; } –

Questions connexes