2014-07-25 22 views
6

Bir try/catch bloğu içine SaveChanges() yöntemini koydum, ancak SqlExeption'ı yakalayamadım.Neden Entity Framework'ün SaveChanges() yönteminde SqlException'ı yakalayamıyorum

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

istenilen davranışı açıkladı ve bariz olduğu bakmak tetiklemek için zaman ve nasıl varlık Çerçeve yalnızca EF üzerinde sorumludur istisnalar Özelleştirilmiş vardır. Açık bir problem bildirimi var. Bunun neden oy verildiğine meraklı ... – maplemale

+2

Bu konuyu kapatırken BS'yi arıyorum. ÖNEMLİ bir konu üzerinde ve hatta beklenen davranışın ne olduğunu gösteren örnek bir kod var. 'Kapatmak için oy verenleri oy verebilirdik. –

+0

yeniden açılmalı ve kabul edilen yanıtı atamalı @usr –

cevap

3

doğrudan atılan olmadığından, SqlException yakalayamazsın, bu DbUpdateException İç İstisna olarak ayarlanır.

Entity Framework, veritabanlarıyla çalışacak bir soyutlamadır, doğrudan herhangi bir Veritabanı teknolojisine bağlı değildir.

DbContext.SaveChanges()

10

SqlException tarafından atılan İstisnalar bir göz System.Data.SqlClient.SqlException sınıftır o sadece tarafından aşağıdaki istisnalar atabilir bu istisnayı EntityFramework DbContext.SaveChanges Method() yakalamak olamaz normaldir böylece Var MSDN

DbUpdateException 
DbUpdateConcurrencyException  

DbEntityValidationException 

NotSupportedException 

ObjectDisposedException 


InvalidOperationException  

Yani örneğin böyle bir şey yapabileceği

try 
{ 
    db.SaveChanges(); 
} 
catch (DbUpdateException ex) 
{ 
} 
catch (DbUpdateConcurrencyException ex) 
{ 
} 
Yukarıda belirtilen

Daha
istisnalar Onları Implementing custom exceptions

+0

Bu sorunun neden kapandığını bilmiyorum, bunun kolay tanımlanabilir bir cevabı olduğu açıktır, bu yüzden eğer basit bir soru ise iyi bir soruydu. bu benim ui yakalamak için kök sql hatası almak için yapıyor sona budur (İstisna ex) { süre (ex.InnerException = null!) ex = ex.InnerException; spanError.Text = ex.Message; } –

İlgili konular