【问题标题】:How save changes to a database after IBindingSource.AddNew() method is used使用 IBindingSource.AddNew() 方法后如何保存对数据库的更改
【发布时间】:2017-08-03 22:59:41
【问题描述】:

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

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

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

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

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

及以后:

myDataSource.AddNew();

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

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

context.Save();

什么都没有发生。我猜是因为 AddNew() 方法新创建的实体没有附加到当前上下文。但我没有引用它来附上它。

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

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

【问题讨论】:

  • 我看到你使用 _context 但你调用 save on context(没有 _)
  • @SkylerLauren 不,这只是一个例子。我到处使用context。不过我会解决的,谢谢!

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多