你调用的对象是空的。 (WPF实体框架)

时间:2013-03-06 11:53:18

标签: c# wpf entity-framework

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

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

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

1 个答案:

答案 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