1

我是实体框架的新手。现在,我正在用一个按钮编写删除功能。当我点击此按钮时,我的数据将被删除;但是,它会弹出“对象引用未设置为对象实例”的警报。我想不通这个问题。

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 { }
        }

如果没有足够的信息,请告诉我添加它。

4

1 回答 1

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.

于 2013-03-06T12:19:18.873 回答