2014-07-25 4 views
6

Ich legte SaveChanges() Methode in einem Try/Catch-Block, aber ich konnte SqlExeption nicht fangen.Warum kann ich nicht fangen SqlException auf SaveChanges() -Methode von Entity Framework

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

Das gewünschte Verhalten offensichtlich wird erklärt und nehmen auszulösen. Es gibt eine klare Problemstellung. Neugierig, warum dies abgelehnt wurde ... – maplemale

+2

Ich rufe BS auf, dieses Thema zu schließen. Es ist offensichtlich am Thema und hat sogar Beispielcode, der zeigt, was das erwartete Verhalten ist. "Ich wünschte, wir könnten diejenigen abwählen, die dafür gestimmt haben, sie zu schließen. –

+0

sollte wieder öffnen und zuweisen akzeptierte Antwort @ usr –

Antwort

3

Sie nicht SqlException fangen kann, weil sie nicht direkt ausgelöst wird, wird es als Interne Ausnahme des DbUpdateException gesetzt.

Entity Framework ist eine Abstraktion, um mit den Datenbanken zu arbeiten, es hängt nicht von irgendeiner Datenbanktechnologie direkt ab.

Haben Sie einen Blick auf die von DbContext.SaveChanges() geworfen Ausnahmen

10

SqlException System.Data.SqlClient.SqlException Klasse ist, so ist es normal, dass Sie nicht diese Ausnahme Die EntityFramework DbContext.SaveChanges Method() nur die folgenden Ausnahmen fangen kann werfen, wie durch MSDN

DbUpdateException 
DbUpdateConcurrencyException  

DbEntityValidationException 

NotSupportedException 

ObjectDisposedException 


InvalidOperationException  

So können Sie so etwas wie dies zum Beispiel tun

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

Mehr
Die Ausnahmen sind über Entity Framework Ausnahmen Customized erwähnt, dass EF nur auf verantwortlich ist, wann und wie man sie einen Blick auf Implementing custom exceptions

+0

Ich weiß nicht, warum diese Frage geschlossen wurde, ist es offensichtlich, aus den Antworten, dass es eine leicht identifizierbare Antwort hat, so war es eine gute Frage, wenn einfach. das ist, was ich für meine ui catch (Exception ex) an die Wurzel SQL-Fehler zu tun am Ende zu bekommen { while (ex.InnerException! = Null) ex = ex.InnerException; spanError.Text = ex.Message; } –

Verwandte Themen