Entité One-To-Many Insert – clé étrangère violation

J’utilise Entity Framework pour la première fois et j’essaie de créer un object avec une collection (et je veux que tous les objects de la collection soient également créés dans une firebase database), mais certaines violations de clés étrangères sont en cours.

Mes exemples de tables:

table APPOINTMENTS: ID, VAR1, DATE_APPOINTMENT table GUESTS: ID, APPOINTMENT_ID, USER_ID, VAR2, VAR3 

Mon code de test:

 DomainService aux = new DomainService(); APPOINTMENTS appointment = new APPOINTMENTS(); appointment.VAR1 = "BLA"; appointment.DATE_APPOINTMENT = new DateTime(); //The user with id = 1 is already created in the database appointment.GUESTS.Add(new GUESTS { USER_ID = 1, VAR2 = 1, VAR3 = "F" }); aux.InsertAppointment(appointment); 

Chez DomainService, j’ai:

 public void InsertAppointment(APPOINTMENTS appointment) { using (var context = this.ObjectContext) { context.AddToAPPOINTMENTS(appointment); context.SaveChanges(); } } 

Mais j’obtiens cette erreur: {“ORA-02291: violation de la contrainte d’intégrité (FK_GUESTS_APPOINTMENTS) – clé parent introuvable”}

Qu’est-ce que je fais mal?

UPDATE: Pour créer l’ID dans la firebase database, j’utilise une séquence pour chaque table et un déclencheur avant insertion pour obtenir la valeur suivante. Lorsque je crée un seul object, par exemple un rendez-vous sans invités, il est inséré dans la firebase database et génère l’identifiant.

La solution à ce problème:

“Les champs d’identifiant générés à partir de séquences ne seront pas gérés correctement. Après avoir sauvegardé les entités, l’identifiant sera retourné à 0. Je résous le problème en piratant manuellement le fichier SSDL (ouvrez votre fichier .edmx dans un éditeur de texte) avec StoreGeneratedPattern = “Identity” atsortingbuts sur les champs ID (lignes 6 et 16). Notez que le concepteur peut extraire cette modification lors de modifications ultérieures.

Bien que je suppose que ce n’est pas absolument nécessaire, il pourrait également être prudent de modifier certaines métadonnées de type, telles que le remplacement de “nombre” par “int” dans votre SSDL et de “Décimal” par “Int32″ dans votre CSDL, le cas échéant. Fréquemment, ceux-ci ne se génèrent pas automatiquement avec les valeurs souhaitées, en particulier avec XE. ”

@http: //www.chrisumbel.com/article/oracle_entity_framework_ef

Pour ma part, le problème a été résolu simplement en ouvrant le diagramme .edmx et en remplaçant la propriété StoreGeneratedPattern de None par Identity pour chaque clé primaire de chaque table. Après avoir sauvé tout allait bien.

J’utilise VS 2012, Entity Framework 5 (6 n’est pas encore pris en charge), Oracle 11.2, dernier ODP.NET 12, .Net 4.5.

En cas d’approche par code EF, si cette erreur survient

(ORA-02291: violation de la contrainte d’intégrité (FK_GUESTS_APPOINTMENTS) – clé parent introuvable)

Dans mon cas, il y a 2 tables qui ont des colonnes d’identité. Alors je viens d’append

 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

propriété à ma classe de modèle juste au-dessus de la colonne qui est la colonne d’identité dans la firebase database et elle a résolu mon problème 🙂

J’espère que cette aide 🙂

Je ne vois pas où vous définissez votre clé primaire (la propriété ID de la classe de rendez-vous). Utilisez-vous un générateur de clé côté firebase database? Sinon, cela devrait être le problème.

Vous insérez un enregistrement avec une valeur de clé étrangère introuvable dans la table parente à laquelle la contrainte fait référence.