C # EF6 и проблема BindingNavigator - PullRequest
0 голосов
/ 08 марта 2019

Я настроил небольшой проект для изучения 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...