C# 使用Linq在Db4o数据库中删除

C# 使用Linq在Db4o数据库中删除,c#,linq,db4o,C#,Linq,Db4o,我在从Db4o数据库中删除时遇到问题。目前,我可以存储新对象并在datagrid视图中显示它们。但由于某些原因,我无法再次删除对象。这是我正在使用的Linq public void DeleteStudent(int ssn) { var config = Db4oFactory.NewConfiguration(); using (var db = Db4oFactory.OpenFile(config, "StudentDB")) {

我在从Db4o数据库中删除时遇到问题。目前,我可以存储新对象并在datagrid视图中显示它们。但由于某些原因,我无法再次删除对象。这是我正在使用的Linq

public void DeleteStudent(int ssn)
    {
        var config = Db4oFactory.NewConfiguration();
        using (var db = Db4oFactory.OpenFile(config, "StudentDB"))
        {
            var query = (from StudentDB x in db
                         where x.SSN == ssn
                         select x);
            if (query != null)
            {
                db.Delete(query);
            }

        }
    }
private void btnDeleteStudent_Click(object sender, EventArgs e)
    {
        int ssn = Convert.ToInt32(txtSSN.Text);
        studentDB.DeleteStudent(ssn);

        gridStudents.DataSource = studentDB.GetAllStudents();
        ClearBoxes(this);
    }
我正在获取要由ssn删除的对象。我已经尝试过调试并检查它是否为null,以及它是否为。我得到了正确的目标

这是我正在使用的GUI部分

public void DeleteStudent(int ssn)
    {
        var config = Db4oFactory.NewConfiguration();
        using (var db = Db4oFactory.OpenFile(config, "StudentDB"))
        {
            var query = (from StudentDB x in db
                         where x.SSN == ssn
                         select x);
            if (query != null)
            {
                db.Delete(query);
            }

        }
    }
private void btnDeleteStudent_Click(object sender, EventArgs e)
    {
        int ssn = Convert.ToInt32(txtSSN.Text);
        studentDB.DeleteStudent(ssn);

        gridStudents.DataSource = studentDB.GetAllStudents();
        ClearBoxes(this);
    }
我从文本框中获取ssn,并在单击“删除”按钮时将其作为参数提供。之后,我将刷新gridview


希望你们中有人能帮忙!我是Db4o新手,所以对它了解不多。

您将错误的对象传递给了数据库

将代码更改为类似以下内容:

using (var db = Db4oFactory.OpenFile(config, "StudentDB"))
{
    var query = (from StudentDB x in db
                 where x.SSN == ssn
                 select x).SingleOrDefault();

     if (query != null)
     {
        db.Delete(query);
     }
     db.Commit();
}

我还尝试了db.Commit();在删除声明之后,为什么要投否决票?有人问得很好,他提供了他尝试的源代码。