我有一个用于编辑和将新用户插入数据库的表单。我使用Entity Framework 6.我的所有控件(文本框和一个组合框)都绑定到特定的绑定源,所以当我用以下内容更新实体时:
context.user.add(user);
context.Save();
我的UI更改了。反之亦然。现在,更新工作正常,但我在插入新用户时遇到了一些问题。目前数据网格视图已设置数据源,我已通过直接单击网格视图禁用添加行(因为我希望该部分通过表单):
好的,到目前为止一切顺利。现在,当我想添加新用户时,我这样做:
myDataSource = context.user.Local.ToBindingList();
myDataSource.AllowNew = true;
以及后来:
myDataSource.AddNew();
调用AddNew()
后,空行被添加到网格视图中,当我在表单中插入值时,所有内容都会自动显示在网格视图中。
问题是,我无法将此数据持久存储到数据库中。如果我这样做:
context.Save();
没有任何反应。我猜是因为AddNew()方法新创建的实体没有附加到当前上下文。但我没有提及它附加它。
我猜AddNew()
会创建一个新实体,对吧?并将其添加到数据源。如果我错了,请纠正我。
那么如何在这种情况下保存更改?
答案 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);
}