Проблема удаления в Entity Framework - PullRequest
0 голосов
/ 07 января 2011

У меня есть таблица, сопоставленная в Entity Framework 4, которая является дочерней таблицей для нескольких других таблиц. Каждый раз, когда я пытаюсь удалить строку в этой таблице, я получаю сообщение ниже. Эта таблица имеет несколько внешних ключей для других таблиц, но она всегда является дочерней таблицей в отношениях, а не основной. Это сообщение появляется, как только я вызываю context.DeleteObject (object), для него не нужен context.SaveChanges (). Я проверил, что все отношения правильно определены в конструкторе .edmx.

Сообщение: Операция не выполнена: отношение не может быть изменено, так как одно или несколько свойств внешнего ключа не могут иметь значение NULL. Когда в отношение вносится изменение, для соответствующего свойства внешнего ключа устанавливается нулевое значение. Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, свойству внешнего ключа должно быть назначено другое ненулевое значение или несвязанный объект должен быть удален.

Таблица

Project (1)  -   (many) ProjectMember (many)  -  (1) Employee
   ProjectID (PK)            ProjectMemberID (PK)         EmployeeID (PK)
   ProjectName (varchar)     ProjectID (FK)               FirstName (varchar)
                             EmployeeID (FK)              LastName (varchar)
                             Role (varchar)

Для каждого проекта у меня есть несколько членов ProjectMembers из списка сотрудников компании. Удаление ProjectMember не должно влиять ни на таблицу Project, ни на сотрудников.

Я не хочу, чтобы FK обнулялись, потому что отношение должно существовать.

Удаление происходит из сетки данных WPF 4, когда удаляется удаляемая строка. Я перехватываю клавишу удаления и вызываю context.DeleteObject ().

CommandManager.AddPreviewExecutedHandler(grid, new ExecutedRoutedEventHandler(gridDeleteCommandHandler));

private void gridDeleteCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
   if (e.Command == DataGrid.DeleteCommand)
   {
    if (grid.SelectedItem is ProjectMember)
    {
        ProjectMember pm = (ProjectMember)grid.SelectedItem;
        _context.DeleteObject(pm);
        SaveChanges();
    }
   }
    e.Handled = true;
}

Любые идеи о том, почему происходит ошибка и как заставить удаление работать? У меня нет проблем с удалением из основной таблицы, если в дочернем элементе нет зависимых строк

1 Ответ

0 голосов
/ 14 января 2011

Нашел проблему. Чтобы получить эти данные, у меня было две сетки на экране. Первый перечислил все проекты, второй перечислил бы ProjectMembers для выбранного проекта. Я бы заполнил сетку ProjectMember, используя тот же контекст, который использовался для заполнения сетки проекта. Так или иначе, и я не понимаю эту часть, отношения, которые произвели ошибку, будут установлены и обеспечены. Но если я заполню сетку ProjectMember, используя другой контекст, я смогу удалить ProjectMembers, как вы ожидаете. Я не знаю, почему Entity Framework ведет себя так, но он работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...