Entity Framework - Ajouter De L'Entité Enfant
Entity Framework 5.0 le premier Code avec la base de données existante. L'ingénierie inverse les classes avec des outils électriques. Tout fonctionne très bien. La base de données a deux tables. Un parent et un enfant avec clé étrangère dans ID parent. ID sont tous de type int, avec incrément automatique. J'ai ajouté un certain nombre d'enregistrements parent et souhaitez ajouter des enregistrements enfants à certains parents. Le seul moyen que je vois pour ce faire est de trouver le bon ID parent par la recherche les Parents de table pour un nom ou une autre propriété et de renvoyer l'ID. Ensuite, utilisez l'IDENTIFIANT de la clé étrangère de la propriété lors de l'ajout de l'enfant. Je ne veux pas créer un nouveau parent, est-ce la seule façon pour ajouter un enfant à un parent? L'ensemble de l'internet des exemples semblent ajouter un enfant ainsi que l'ajout d'un nouveau parent et de ne pas ajouter un enfant à un parent. Toute aide serait grandement appréciée
Permettez-moi d'essayer avec un exemple. Disons que l'entité mère est des enseignants et j'Bob, Julie et Dave dans la db. L'enfant entité est en cours avec un professeur à de nombreuses classes de la relation. Je veux ajouter une classe à Julie, mais je n'ai pas de son identité principal car il a été créé automatiquement il y a quelques jours lorsque je suis entré dans sa. Donc, dois-je recherche les enseignants de la propriété nom de "Julie" et de retourner sa carte d'identité principale et ensuite l'utiliser comme la nouvelle classe de clé étrangère?
Le seul moyen d'identifier Julie est d'utiliser l'ID. La raison pour cela est que l'ID est toujours Unique pourquoi le nom ne l'est pas. Vous pouvez apporter de l'entité de la base de données à l'aide de code comme " contexte.Les enseignants.La première(t => t.Nom == "Julie") et l'utilisation de l'ID ou de référence. Il n'y a pas d'autre façon de mettre en relation puisque vous ne savez pas ce que pour définir la relation. Notez également que Julie aurait pu être supprimés dans l'intervalle.
OriginalL'auteur user1626137 | 2012-10-30
Vous devez vous connecter pour publier un commentaire.
"Julie" (Lerman) se trouve être un de nos enseignants quand il s'agit de EF. Comme elle l'explique dans son livre DbContext il peut y avoir trois propriétés parent-enfant, de l'association, deux propriétés de navigation (parent.Enfants, enfant.Parent) et d'une clé étrangère de la propriété (l'enfant.ParentId). Vous pouvez choisir l'un de ces, ou de toute combinaison de ceux-ci dans votre code.
EF est déclenchée pour détecter des changements (par exemple, lorsque
SaveChanges
est invoquée), il commence un processus appelé relation de correction qui assure que les trois propriétés seront synchronisés.Donc, vous avez trois options pour ajouter une entité enfant à un parent:
child.Parent = parentObject
. L'objet parent doit être récupérée à partir de la première base de données.parentObject.Children.Add(child)
. Nécessite également un pré-existante de l'objet parent de la base de données.child.ParentId = parentId
, pour qui vous avez seulement besoin de connaître le numéro d'identification. Vous pouvez obtenir l'Id de la façon dont vous l'avez suggéré, mais tout aussi bien, pour les objets que vous savez ne sera pas supprimé, vous pouvez l'enregistrer dans une variable afin de la réutiliser sur plusieurs transactions.Avec les deux premières options de l'objet enfant n'a pas besoin d'être ajouté au contexte manuellement. EF en sait assez pour voir que c'est nouveau. Avec la troisième option, celle-ci ne doit être ajouté à
context.Children
avantSaveChanges
.OriginalL'auteur Gert Arnold