我有一个问题,我重写了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我在下面回答了我的问题在你的和里德的评论指出我在正确的方向。谢谢!芦苇?您的评论完全有效......不知道你为什么删除它。如果你们中的任何一方都愿意以答案的形式发布建议,我会接受而不是我自己的。 –