रखें जब मैं निम्नलिखित कोड के साथ एक फ़ोरैच के माध्यम से पुन: प्रयास करता हूं तो यह पहले अपवाद को सफलतापूर्वक पकड़ता है और आईडी को मेरी त्रुटि सूची में जोड़ता है। लूप के बाद के पुनरावृत्तियों पर, यह पिछले अपवाद को पकड़ना जारी रखेगा।इकाई फ्रेमवर्क; फ़ोरैच लूप में अपवाद को कैसे संभालें और इसे
मैं अपवाद को उचित रूप से कैसे पकड़ सकता हूं और असफल DeleteObject अनुरोध को पूर्ववत या साफ़ कर सकता हूं ताकि बाद में हटाए जा सकें।
public ActionResult Delete(int[] ListData)
{
List<int> removed = new List<int>();
List<int> error = new List<int>();
Item deleteMe;
foreach (var id in ListData)
{
deleteMe = this.getValidObject(id);
if (deleteMe == null)
{
error.Add(id);
continue;
}
try
{
this.DB.Items.DeleteObject(deleteMe);
this.DB.SaveChanges();
removed.Add(id);
}
catch (DataException ex)
{
// revert change to this.DB.Items?
error.Add(id);
}
}
if (error.Count > 0)
{
return Json(new { Success = false, Removed = removed, Error = error });
}
return Json(new { Success = true, Removed = removed });
}
मैं इतना खोज की है और गूगल और ज्यादातर लोगों के लिए पहले सभी हटाने वस्तुओं की प्रक्रिया और उसके बाद इतना है कि यह एक लेन-देन है परिवर्तन की बचत होगी है। लेकिन मुझे प्रत्येक लेनदेन को व्यक्तिगत रूप से संसाधित करने की आवश्यकता है ताकि एक विफलता शेष लेनदेन को रोक न सके।
मैं इकाई की रूपरेखा 4.
अपवाद मैं इस विशिष्ट विदेशी कुंजी की वजह से उदाहरण के लिए मिलता है आइटम है कि निकाले जाने के जुड़ा रहा उपयोग कर रहा हूँ। उत्पादन में रहते हुए मैं इस परिदृश्य को संभालेगा, इससे कोई फर्क नहीं पड़ता कि अपवाद क्या है।
ListData क्या है? एक 'सूची <> 'या' IQueryable <> '? –
मैंने अधिक संदर्भ दिखाने के लिए कोड को अद्यतन किया है। – SidewaysGravity