![](/img/trans.png)
[英]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.