2014-07-25 6 views
6

की विधि मैं आज़माएं/कैच ब्लॉक के अंदर SaveChanges() विधि डाल नहीं पकड़ सकते हैं, लेकिन मैं SqlExeption पकड़ नहीं सकता है।मैं क्यों SaveChanges पर SqlException() इकाई की रूपरेखा

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

वांछित व्यवहार की व्याख्या की और स्पष्ट है पर एक नज़र डालें को गति प्रदान कर रहे हैं। एक स्पष्ट समस्या कथन है। जिज्ञासु के लिए कारण है कि इस मतदान किया गया था के रूप में ... – maplemale

+2

मैं बी एस इस विषय को बंद करने पर कहते हैं। यह मूल रूप से विषय पर है और यहां तक ​​कि उदाहरण कोड भी दिखा रहा है कि अपेक्षित व्यवहार क्या है। 'इच्छा है कि हम उन लोगों को वोट दें जो इसे बंद करने के लिए मतदान करते हैं। –

+0

फिर से खोलने और –

उत्तर

3

आप SqlException नहीं पकड़ सकते, क्योंकि यह सीधे फेंक दिया नहीं है, यह DbUpdateException के भीतरी अपवाद के रूप में स्थापित किया जाएगा।

इकाई की रूपरेखा एक अमूर्त डेटाबेस के साथ काम करने के लिए है, यह किसी भी डेटाबेस प्रौद्योगिकी पर सीधे निर्भर नहीं करता है।

अपवाद DbContext.SaveChanges()

10

SqlException द्वारा फेंका पर एक नज़र System.Data.SqlClient.SqlException वर्ग है, इसलिए यह सामान्य है कि आप इस अपवाद EntityFramework DbContext.SaveChanges Method() के रूप में ही द्वारा निम्न अपवादों फेंक कर सकते हैं नहीं पकड़ सकते है है MSDN

DbUpdateException 
DbUpdateConcurrencyException  

DbEntityValidationException 

NotSupportedException 

ObjectDisposedException 


InvalidOperationException  

तो तुम उदाहरण के लिए कुछ इस तरह कर सकते हैं

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

अधिक
अपवाद जैसा कि ऊपर उल्लेख इकाई की रूपरेखा स्वनिर्धारित अपवाद है कि केवल EF पर जिम्मेदार है जब और कैसे उन्हें Implementing custom exceptions

+0

मुझे नहीं पता क्यों इस सवाल प्रतिक्रियाओं यह एक आसानी से पहचाने जाने जिसका उत्तर तो यह है, तो सरल एक अच्छा सवाल था से बंद हो गया है, इसकी स्पष्ट @usr स्वीकार किए जाते हैं जवाब आवंटित करने चाहिए। यह है कि क्या मैं अपने ui पकड़ के लिए रूट एसक्यूएल त्रुटि को पाने के लिए कर रही है समाप्त हो गया है (अपवाद पूर्व) { जबकि (ex.InnerException = अशक्त!) पूर्व = ex.InnerException; spanError.Text = ex.Message; } –

संबंधित मुद्दे