我已经设置了一个小项目来学习EF6,并且对绑定导航器有疑问。
我将BindingSource绑定到BindingNavigator和DataGridView。
添加,删除,更新...所有操作均完美无误。 在这种情况下,唯一无法正常工作的是:
错误是正确的,但是为什么该行仍在ChangeTracker中?
它不应该在那里,我添加并随后删除了一行,所以它不应该在那里。
而是存在,并且EntityState
是Added
。
实际上BindingSource没有它,也尝试了EndEdit()。
我想念什么?
当前,我的解决方案是遍历Local上下文中的每个项目,并验证其是否存在于BindingSource中:
private void DeleteMissingRowsFromContext(DbSet dbSet, BindingSource bindingSource)
{
for (int i = 0; i < dbSet.Local.Count; i++)
{
string currentId = dbSet.Local[i].GetType().GetProperty("Id").GetValue(dbSet.Local[i], null).ToString();
bool found = false;
for (int j = 0; j < bindingSource.Count; j++)
{
string bindId = bindingSource[j].GetType().GetProperty("Id").GetValue(bindingSource[j], null).ToString();
if (bindId == currentId)
{
found = true;
break;
}
}
if (!found)
dbSet.Local.RemoveAt(i);
}
}