我有一个用于编辑和将新用户插入数据库的表格。我使用Entity Framework6。我所有的控件(文本框和一个组合框)都绑定到特定的绑定源,因此当我使用以下方法更新实体时:
context.user.add(user);
context.Save();
我的用户界面发生了变化。反之亦然。现在,更新工作正常,但是在插入新用户时遇到一些问题。当前,数据网格视图已设置了数据源,并且我已经禁用了通过直接单击网格视图来添加行(因为我希望该部分通过表单):
好的,到目前为止很好。现在,当我想添加新用户时,请执行以下操作:
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);
}