为什么我得到"对象处于分离或删除状态"删除未修改的行时?

时间:2014-12-22 21:27:54

标签: c# winforms entity-framework

我正在使用EntityFramework 4来管理简单网格中的数据。我们需要跟踪表格中的复选框。它旨在快速解决从小表中获取数据的问题,而不是大项目。

我在表单中定义了以下内容

private MyDBEntites _context = new MyDBEntities(...);
private BindingSource myBindingSource = new BindingSource(...);
public DataGridView myGrid = new DataGridView();

在我的构造函数中,我填充了网格

    int customerID = 1234;

    myGrid.DataSource = myBindingSource;

    myBindingSource.DataSource = (from cc In _context.myRecords
                                  where cc.CustomerID = customerID
                                  select cc).AsEnumerable();

我的意图是根据需要修改表格。当我完成更改后,我单击一个调用SaveForm()

的按钮
public void SaveForm()
{
    _context.SaveChanges();
}

对于添加和修改行,这非常有效。但是,当我删除一行,然后调用上面的SaveChanges时,我的应用程序崩溃了“对象处于分离或删除状态”。除非删除一行,否则我什么也没做。

为什么我不能以这种方式删除一行?有人知道在删除之前可能会“改变”吗?如果是这样,你知道如何解决这个问题吗?

更新

我仍然不知道为什么会失败,但我确实有一个解决方法。我试图通过一次“SaveChanges()”调用来排队删除并管理我的所有更改。这没有业务需求。只是个人喜好。相反,我在Remove的末尾放了一个SaveChanges,这样就完美了。

private void myGrid_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    if (e.Row == null) 
    {
        return;
    }

    if ((MessageBox.Show("Are you certain that you want to delete this entry?", "", MessageBoxButtons.YesNo) == DialogResult.Yes)) 
    {
        myRecord req = (myRecord)e.Row.DataBoundItem;

        myBindingSource.Remove(req);
        _context.myRecords.DeleteObject(req);

        _context.SaveChanges();
    }
}

0 个答案:

没有答案