Невозможно удалить в EF4

Я пытаюсь удалить «AttendeeEvent» из базы данных с помощью EF4, однако получаю следующую ошибку:

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

Мой код выглядит следующим образом: -

        public void UnRegisterCurrentUserForEvent(int eventId)
    {
        Attendee attendee = GetOrCreateAttendeeForCurrentUser();
        AttendeeEvent av = attendee.AttendeeEvents.SingleOrDefault(x => x.EventID == eventId);

        if(av != null)
        {
            attendee.AttendeeEvents.Remove(av);
        }

        this.ObjectContext.SaveChanges();
    }

Я попытался изменить End 2 On Delete из свойств в .edmx, однако, когда я установил каскад, я получаю сообщение об ошибке: -

Ошибка 1 Ошибка 132: невозможно указать операцию, поскольку ее кратность равна ''. Операции не могут быть указаны на концах с кратностью ''

Можете ли вы, ребята, помочь мне

Спасибо за вашу помощь и время


person JMon    schedule 23.07.2010    source источник
comment
У вас есть каскад в БД? Было ли это у вас, когда вы создавали свою модель? Похоже, вы должны.   -  person Craig Stuntz    schedule 23.07.2010


Ответы (1)


Вы удаляете только AttendeeEvent из коллекции событий посетителей для Attendee. Предположим, у вас есть участник A и событие AV, и вы удаляете AV из A. Что должно происходить внутри базы данных? На самом деле вы не удалили AV. Вы только сказали, что A больше не должно быть связано с AV. Таким образом, внутри вашей базы данных для внешнего ключа от AV до A установлено значение NULL, что не разрешено вашей моделью базы данных.

Исправление простое: замените строку, в которой вы удаляете событие из участника, следующей строкой:

this.ObjectContext.AttendeeEvents.DeleteObject(av);
person Ronald Wildenberg    schedule 23.07.2010