未设置为对象实例的对象引用.(WPF Entityframework)

本文关键字:WPF Entityframework 对象引用 设置 对象 实例 | 更新日期: 2023-09-27 18:02:26

我是实体框架的新手。现在,我写一个带有按钮的删除函数。当我点击此按钮时,我的数据将被删除;但是,它会弹出"对象引用未设置为对象的实例"的警告。我想不出这个问题。

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

如果没有足够的信息,请告诉我补充。

未设置为对象实例的对象引用.(WPF Entityframework)

考虑到你的评论,你应该这样做:

因为它看起来像你所有的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