我是实体框架的新手。 现在,我正在用一个按钮编写删除功能。单击此按钮时,我的数据将被删除;但是,它会弹出“对象引用未设置为对象实例”的警报。我无法弄清楚这个问题。
private void btnDelete_Click(object sender, RoutedEventArgs e)
{
try
{
if (UserDataGrid.SelectedItems.Count == 0)
return;
if (UserDataGrid.SelectedItems.Count > 0)
if (MessageBox.Show("Would you want to delete?", "Yes", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
var selected = UserDataGrid.SelectedItem as User;
var index = selected.Index;
User user = new User();
user = ssEntities.User.Where(x => x.Index == index).First();
if (user != null)
{
ssEntities.User.DeleteObject(user);
ssEntities.SaveChanges();
}
}
}
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
finally { }
}
如果没有足够的信息,请告诉我添加它。
答案 0 :(得分:1)
考虑到你的意见,这是你应该做的:
因为看起来所有try-catch
块都写成如下
try { }
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
finally { }
你完全不知道异常发生在哪里,因为你正在丢失整个StackTrace。您应该更改此行为,因为这有很多问题。找到所有使用此模式的代码块并将其更改为以下内容:
try { }
catch (Exception ex)
{
Debug.WriteLine(string.Format("An exception has occurred in <some function>: {0}\n{1}", ex.Message, ex));
MessageBox.Show(ex.Message);
}
finally { }
这样,您将能够在Debug窗口中看到更详细的输出,并且您应该能够通过检查StackTrace找到确切的异常。
当然,您可以使用Debug.WriteLine
之类的其他日志记录机制,而不是使用log4net
。