Lorsque j'exécute le code mentionné ci-dessous, EF enregistre le Il semble que les entités soient enregistrées correctement pour le raisons suivantes: p> En réglant manuellement le si techniquement EF fait pas strong> Ajouter les entités associées automatiquement, ils sont liés comme ils partagent le même Veuillez consulter le code ci-dessous comme référence: p> quand je Ajoutez une personne code> supplémentaire code> au code, je reçois l'erreur suivante:
comme l'erreur d'erreur spécifiée deframework ne peut désormais pas déterminer à qui les entités code> PersonAddress CODE> appartiennent. P> Je peux résoudre Ceci en modifiant le code ci-dessous: p> Veuillez voir l'EDMX ci-dessous: p> Veuillez consulter le script SQL utilisé pour créer les deux tables: P> PersonAddress code> avec le bon
Persiciable code>. J'ai
PersonAddress code> à la personne
personne code>, même si je n'ai pas fait cela, les enregistrements de ma base de données sont correctement liés. Ma question est la suivante: EF
personne code> Le champ code> personnage code> est 0 li>
personaddress.personid code> est également 0 au moment de la création. LI>
ol>
personne.personid code> à n'importe quelle valeur au moment de la création, puis réglage
personaddress.personid code> sur cette même valeur de
PERSON.PERSONID CODE> EF enregistre les données correctement car elles partagent le même
PersonID code>. P>
PersonID code>. p>
de
Code: p> p>
CREATE TABLE Person
(
PersonId INT IDENTITY(1,1) NOT NULL CONSTRAINT [PK_Person] PRIMARY KEY,
FirstName VARCHAR(250)
)
CREATE TABLE PersonAddress
(
PersonAddressId INT IDENTITY(1,1) NOT NULL CONSTRAINT [PK_PersonAddress] PRIMARY KEY,
PersonId INT NOT NULL,
AddressLine1 VARCHAR(250)
)
ALTER TABLE PersonAddress
ADD CONSTRAINT [FK_PersonAddress_Person] FOREIGN KEY(PersonId)
REFERENCES [Person](PersonId)
4 Réponses :
Aucun EF ne peut pas ajouter une entité associée automatiquement si vous ne spécifiez pas quelle est la deuxième entité, la raison est la contrainte d'intégrité des données dans la base de données, espérons que cela aide. P>
Eh bien, si EF ne le fait pas automatiquement, pourquoi mon premier tirage du code fonctionne-t-il?
Comme je le vois, cela n'a pas fonctionné, avez-vous essayé d'insérer un objet PersonAdresses?
Ici, vous attachez les deux entités de la personne au contexte et ici, vous attachez les deux adresses à l'entité de la première personne p> dans votre premier code, vous ne créez que des personnes et des adresses et tentent de les ajouter à la base de données. Il n'y a pas de cartographie entre eux et l'entité Framework ne sait pas qu'ils devraient être liés. P> p>
Le premier extrait de code fonctionne, EF les relie correctement. Veuillez exécuter le premier extrait de code et vous verrez le résultat.
J'ai testé le scénario en créant un nouveau projet contre une nouvelle base de données que j'ai créée avec votre script. J'ai ensuite généré un modèle contre le départ, toutes les valeurs par défaut.
Voici le code que j'ai utilisé pour créer la personne et les adresses. P> Je peux confirmer que ce code Faites effectivement courir et insérer une personne et deux adresses liées à cette personne. Il ressemble vraiment à EF le file si il n'y a qu'une seule entité qu'elle pourrait éventuellement être liée à. Je ne sais pas si cela est censé être une caractéristique, mais cela peut faire des mauvaises surprises. P> p>
Je suis d'accord, cela peut conduire à des relations non désirées créées.
Fait intéressant, je l'ai essayé avec une personne nullable à l'adresse. Dans ce cas, le personnage reste null. Cela me fait suspecter encore plus que cela est censé être une fonctionnalité.
Cela ne fournit pas de réponse à la question.
@Jenishrabadiya La question était "L'énityFramework ajouta-t-elle automatiquement les entités associées, même si je n'ai pas précisé l'entité qu'elle appartient?". J'ai répondu "il ressemble vraiment à EF le file si il n'y a qu'une seule entité qu'elle pourrait éventuellement lier à." Je ne sais pas pourquoi vous pensez que cela ne répond pas à la question. Si la question était la raison pour laquelle EF est-ce que ce serait une question différente.
Si cela aurait été la question, il a déjà une réponse en post de l'OP en question. Le premier extrait fonctionne bien.
A personne code> est créé avec
Persiciable code> = 0. p>
context.SaveChanges();
Réglage IT -1 Jetez une erreur d'erreur en conflit ... Cela signifie que cela fonctionne. très bonne réponse!
Une réponse à la question toujours intéressante (qui me coûte juste quelques heures) "Comment cela a-t-il déjà travaillé?"
Non. EF ne devrait pas lier ensemble les deux objets. Veuillez afficher votre modèle de DB (Spécialement définition de
personne code> et
personaddress code>) car ce problème est probablement causé par un modèle de DB incorrects.
Je ne vois pas de bons changements entre le premier et le deuxième extrait qui pourrait résoudre l'erreur (
dbupdateException code>) dans l'extrait.
Puis-je poster une image du modèle de base de données comme ce sont les deux seules tables?
JENISH RABADIYA - S'il vous plaît voir que dans le dernier code Snippet I appelle
personne.personaddresses.add code> au lieu de
context.personaddresses.add ( code>
Comment les identifiants de la personneAddRESS sont-ils générés? IDENTITÉ?
Oui L'ID PersonAddress est l'identité, veuillez vous reporter à la question mise à jour avec le script SQL ci-joint utilisé pour créer les deux tables.
Vérifiez que EF est configuré pour utiliser ces valeurs d'identité. Le magasinGeneratedPattern doit être configuré correctement.
Veuillez vous reporter à la question mise à jour avec les captures d'écran ci-jointes des propriétés de colonnes ID.
@Tjaartvanderwalt n'est pas lié à la question mais note pour ajouter @ avant le nom de l'utilisateur dans le commentaire afin que l'utilisateur soit informé de votre commentaire.
@Tjaartvanderwalt Ce n'est pas possible. Vous auriez dû avoir une exception. Quels sont l'identifiant de la personne.Id et personnentaddress.personid lorsque vous l'avez inséré avec premier extrait?
@Jenishrabadiya Je ne reçois aucune erreur sur le premier extrait. Le
personaddress.personnid code> dans la base de données est la valeur de la personne insérée
code>. J'ai maintenant ajouté plusieurs enregistrements de personne via SQL pour obtenir le
PERSONID CODE> incrémenté, après cela, le premier extrait réussit toujours à relier la nouvelle personne
personne code> et
personaddress code >. Si vous avez le profileur SQL, veuillez exécuter une trace et vous verrez que le SQL généré pour insérer les entités code> PersonAddress CODE> aura le bon
personnage code> comme paramètre.