[英]Message thrown from catch block in Controller is not displayed properly
[英]ApplicationException not being thrown to catch block properly
我在重寫LINQ to SQL類的OnValidate
方法時遇到問題。 我已經正確地編寫了業務規則,並且一切都很好,但是當我在對存儲庫的調用中捕獲異常時,應用程序將異常視為未處理。
在LINQ to SQL子類中,我具有以下內容:
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 to SQL類屬性的一組檢查。
在我的表單中,我有一個按鈕單擊事件,該事件在我的存儲庫類上調用SubmitChanges
方法。 我已經將其包裝在try/catch
塊中,但是Exception不會冒到我的catch
而是在我的局部類中throw new ApplicationException()
塊時出錯。
以下是Button周圍的代碼:( 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
線。
是什么導致該異常在該行停止並且沒有冒泡到Presentation層中的catch
塊?
感謝Reed Copsey和Astander的評論,我終於找到了答案。 我的調試器被設置為針對ApplicationException
和System.Exception
用戶未處理異常中斷。
我之所以沒有趕上這一點的原因是因為我認為以某種方式在catch塊中“處理”它們會覆蓋第一次機會功能,但顯然並非如此。
關閉“異常中斷”功能可使異常氣泡上升到我想要的位置。
為了簡潔起見,以下是執行此操作的步驟:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.