如何在使用IBindingSource.AddNew()方法后保存对数据库的更改

时间:2017-08-03 22:59:41

标签: c# visual-studio datagridview entity-framework-6 bindingsource

我有一个用于编辑和将新用户插入数据库的表单。我使用Entity Framework 6.我的所有控件(文本框和一个组合框)都绑定到特定的绑定源,所以当我用以下内容更新实体时:

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

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

tasks window

好的,到目前为止一切顺利。现在,当我想添加新用户时,我这样做:

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

以及后来:

myDataSource.AddNew();

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

问题是,我无法将此数据持久存储到数据库中。如果我这样做:

context.Save();
没有任何反应。我猜是因为AddNew()方法新创建的实体没有附加到当前上下文。但我没有提及它附加它。

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

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

1 个答案:

答案 0 :(得分:0)

在将添加的记录持久保存到数据库中时,我遇到类似的问题。我有相同的基本设置,使用.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);
    }