我有一个用于编辑和将新用户插入数据库的表格。我使用Entity Framework6。我所有的控件(文本框和一个组合框)都绑定到特定的绑定源,因此当我使用以下方法更新实体时:

context.user.add(user);
context.Save();


我的用户界面发生了变化。反之亦然。现在,更新工作正常,但是在插入新用户时遇到一些问题。当前,数据网格视图已设置了数据源,并且我已经禁用了通过直接单击网格视图来添加行(因为我希望该部分通过表单):

c# - 使用IBindingSource.AddNew()方法后如何将更改保存到数据库-LMLPHP

好的,到目前为止很好。现在,当我想添加新用户时,请执行以下操作:

myDataSource = context.user.Local.ToBindingList();
 myDataSource.AllowNew = true;


后来:

myDataSource.AddNew();


调用AddNew()后,空白行将添加到网格视图中,并且当我在表单中插入值时,所有内容都会自动显示在网格视图中。

问题是,我真的无法将这些数据持久保存到数据库中。如果我做:

context.Save();


没发生什么事。我猜是因为通过AddNew()方法新创建的实体未附加到当前上下文。但我没有附加它的参考。

我猜AddNew()创建了一个新实体,对吗?并将其添加到数据源。如果我错了,请纠正我。

那么在这种情况下如何保存更改?

最佳答案

对于将添加的记录持久保存到数据库,我也有类似的问题。我有相同的基本设置,使用.Load并设置绑定源数据源= .Local.ToBindingList()
并找到了解决该问题的方法。因此,在我的绑定导航器save事件下,这是我可以获取新添加的记录并将其记录到数据库中的唯一方法。最后一次ResetBindings调用只是为了使标识ID显示其实际的DB值而不是零。

    private void mapBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        mapBindingSource.EndEdit();
        mapBindingSource.ResetBindings(false);
        mapBindingSource.EndEdit();
        _db.SaveChanges();
        mapBindingSource.ResetBindings(false);
    }

07-24 09:38
查看更多