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

问题描述 投票:3回答:1

我有一个表单,用于编辑和将新用户插入数据库。我使用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()创造了一个新实体,对吧?并将其添加到数据源。如果我错了,请纠正我。

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

c# visual-studio datagridview entity-framework-6 bindingsource
1个回答
0
投票

我有一个类似的问题,即将持续添加的记录保存到数据库中。我有相同的基本设置,使用.Load,并设置绑定源数据源= .Local.ToBindingList()并找到了一个奇怪的问题解决方案。因此,在我的绑定导航器保存事件下,这是我可以获取新添加的记录以使其进入数据库的唯一方法。最后一次ResetBindings调用只是为了让Identity Id显示它的实际DB值而不是零。

    private void mapBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        mapBindingSource.EndEdit();  
        mapBindingSource.ResetBindings(false);
        mapBindingSource.EndEdit();
        _db.SaveChanges();
        mapBindingSource.ResetBindings(false);
    }
© www.soinside.com 2019 - 2024. All rights reserved.