Я настроил небольшой проект для изучения EF6 и имею проблему с навигатором привязок.
У меня есть BindingSource, связанный с BindingNavigator и DataGridView.
Добавление, удалениеОбновление ... все работает без нареканий.Единственное, что не работает должным образом, в этом случае:
- добавить новую строку через BindingNavigator;
- мгновенно удалить эту новую строку;
- Сохранить изменения -> выдает ошибку, потому что обязательные поля пусты.
Ошибка верна, но почему эта строка все еще находится в ChangeTracker?Это не должно быть там, я добавил и впоследствии удалил строку, таким образом, это не должно быть там.Вместо этого присутствует и EntityState
является Added
.
Действительно, BindingSource не имеет его, также пытался EndEdit ().
Чего мне не хватает?
В настоящее время мое решение состоит в том, чтобы просмотреть каждый элемент в локальном контексте и проверить, существует ли он в 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);
}
}