C#EF6和BindingNavigator问题

时间:2019-03-08 15:35:50

标签: c# entity-framework-6 bindingnavigator

我已经设置了一个小项目来学习EF6,并且对绑定导航器有疑问。

我将BindingSource绑定到BindingNavigator和DataGridView。

添加,删除,更新...所有操作均完美无误。 在这种情况下,唯一无法正常工作的是:

  • 通过BindingNavigator添加新行;
  • 立即删除此新行;
  • 保存更改->会引发错误,因为必填字段为空。

错误是正确的,但是为什么该行仍在ChangeTracker中? 它不应该在那里,我添加并随后删除了一行,所以它不应该在那里。 而是存在,并且EntityStateAdded

实际上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);
    }
}

0 个答案:

没有答案