2014-07-25 11 views
6

Ho inserito il metodo SaveChanges() all'interno di un blocco try/catch, ma non sono riuscito a intercettare SqlExeption.Perché non riesco a intercettare SqlException sul metodo SaveChanges() di Entity Framework

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

il comportamento desiderato è spiegato ed evidente. C'è una chiara affermazione del problema. Curioso sul motivo per cui questo è stato votato ... – maplemale

+2

chiamo BS per chiudere questo argomento. è OBVELICAMENTE on-topic e ha anche un codice di esempio che mostra quale sia il comportamento previsto. 'Vorrei poter votare quelli che hanno votato per chiuderlo. –

+0

dovrebbe riaprire e assegnare risposta accettata @ usr –

risposta

3

Non si può prendere SqlException perché non è gettato direttamente, è impostato come interno eccezione del DbUpdateException.

Entity Framework è un'astrazione per lavorare con i database, non dipende direttamente da alcuna tecnologia di database.

Date un'occhiata alle eccezioni generate dal DbContext.SaveChanges()

10

SqlException è classe System.Data.SqlClient.SqlException quindi è normale che non si può intercettare questa eccezione L'EntityFramework DbContext.SaveChanges Method() può gettare le seguenti eccezioni unicamente MSDN

DbUpdateException 
DbUpdateConcurrencyException  

DbEntityValidationException 

NotSupportedException 

ObjectDisposedException 


InvalidOperationException  

Così si può fare qualcosa di simile per esempio

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

Più
Le eccezioni di cui sopra sono Entity Framework eccezioni che solo EF è responsabile sulla personalizzato Quando e come innescare li diano un'occhiata al Implementing custom exceptions

+0

non so perché questa domanda è stata chiusa, è ovvio dalle risposte che ha una risposta facilmente identificabile quindi è stata una buona domanda se semplice. questo è quello che ho finito per fare per arrivare alla radice degli errori di SQL per la mia ui catch (Exception ex) { while (ex.InnerException! = Null) ex = ex.InnerException; spanError.Text = ex.Message; } –

Problemi correlati