我有一個問題,我重寫了LINQ to SQL類的OnValidate
方法。我已經正確編寫了我的業務規則,並且一切正常,但是當我去調用我的存儲庫中的異常時,應用程序將Exception視爲未處理。ApplicationException不會被正確地捕獲塊
在LINQ到SQL局部I類有以下幾點:
partial void OnValidate(ChangeAction action)
{
if (!IsValid)
//Application is halting here before my catch block code is reached
throw new ApplicationException("Invalid note data recieved! Correct the following issues and try again:");
//UpdateTimeStamp();
}
的IsValid
是隻是對LINQ一組檢查,以SQL類屬性。
在我的表單中,我有一個按鈕單擊事件,它調用我的存儲庫類中的SubmitChanges
方法。我已將它包裝在try/catch
塊中,但該例外不會冒泡到我的catch
,而是出現在我的部分類中的throw new ApplicationException()
塊中的錯誤。
下面是按鈕周圍的代碼:(Repository
是IRepository
的注入實現)。
private void SubmitButton_Click(object sender, EventArgs e)
{
try
{
if (IsNewNote)
{
//CurrentNote is an instance of my LINQ to SQL class.
this.Repository.InsertNote(CurrentNote);
}
this.Repository.Save();
}
catch (ApplicationException ex)
{
MessageBox.Show(String.Format("{0}" + Environment.NewLine + "{1}", ex.Message, this.CurrentNote.GetRuleViolations().FirstOrDefault().ErrorMessage));
}
}
而對於這裏的上下文是InsertNote()
和Save()
方法在我的倉庫實現(沒有什麼特別的,只是基本的LINQ to SQL調用)。
public void InsertNote(UnvoucheredInventoryNote note)
{
_db.UnvoucheredInventoryNotes.InsertOnSubmit(note);
}
public void Save()
{
_db.SubmitChanges();
}
我試圖趕上並重新拋出異常的Save()
方法,但它仍然失敗,並指出在我OnValidate
方法throw
線。
什麼會導致此異常暫停在該行,而不是冒泡到表示層中的我的catch
塊?
你有看看[如何:斷開用戶未處理的例外](http://msdn.microsoft.com/en-us/library/038tzxdw.aspx) –
@astander我在下面回答了我的問題在你的和裏德的評論指出我在正確的方向。謝謝!蘆葦?您的評論完全有效......不知道你爲什麼刪除它。如果你們中的任何一方都願意以答案的形式發佈建議,我會接受而不是我自己的。 –