簡體   English   中英

沒有拋出ApplicationException來正確捕獲塊

[英]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周圍的代碼:( RepositoryIRepository的注入實現)。

    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的評論,我終於找到了答案。 我的調試器被設置為針對ApplicationExceptionSystem.Exception用戶未處理異常中斷。

我之所以沒有趕上這一點的原因是因為我認為以某種方式在catch塊中“處理”它們會覆蓋第一次機會功能,但顯然並非如此。

關閉“異常中斷”功能可使異常氣泡上升到我想要的位置。

為了簡潔起見,以下是執行此操作的步驟:

  1. 轉到VS中的“調試”菜單
  2. 點擊“例外...”
  3. 展開“公共語言運行時(CLR)異常
  4. 取消選中您希望被First Chance調試器捕獲的異常類型
  5. 點擊確定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM