2010-07-23 6 views
2

Je suis en train de supprimer un « AttendeeEvent » de la base de données avec EF4, mais je reçois l'erreur suivante: -Impossible de supprimer dans EF4

L'opération a échoué: La relation ne pouvait pas être changé parce que l'un ou plusieurs des les propriétés de clé étrangère sont non nullable. Lorsqu'une modification est apportée à une relation, la propriété de clé étrangère associée est définie sur une valeur nulle. Si la clé étrangère ne prend pas en charge les valeurs nulles, une nouvelle relation doit être définie, une autre valeur non nulle doit être affectée à la propriété de clé étrangère ou l'objet non lié doit être supprimé.

Mon code est le suivant: -

 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(); 
    } 

J'ai essayé de changer la fin 2 sur Supprimer des propriétés du .edmx mais quand je me mis à cascade, je reçois une erreur: -

Erreur 1 Erreur 132: impossible de spécifier une opération car sa multiplicité est ''. Les opérations ne peuvent être spécifiées sur les extrémités avec la multiplicité « »

Pouvez-vous les gars me aider

Merci pour votre aide et le temps

+0

Avez-vous une cascade dans le DB? L'aviez-vous lorsque vous avez créé votre modèle? On dirait que vous devriez. –

Répondre

2

Vous supprimez seulement les AttendeeEvent de la collection d'événements de participants pour un Attendee . Alors supposons que vous avez un participant A et l'événement AV et vous supprimez AV de A. Que devrait-il se passer dans la base de données? Vous n'avez pas réellement supprimé AV. Vous avez seulement dit que A ne devrait plus être lié à AV. Donc, dans votre base de données, la clé étrangère de AV à A est définie sur NULL, ce qui n'est pas autorisé par votre modèle de base de données.

La solution est simple: remplacer la ligne où vous retirez l'événement du participant avec la ligne suivante:

this.ObjectContext.AttendeeEvents.DeleteObject(av); 
+0

cool merci qui a fonctionné! Merci beaucoup – Johann

Questions connexes