J'ai conçu la table pouvant contenir des paramètres ( paramètres em>) pour des enregistrements de plusieurs tables ( étudiants em>, enseignants em>). une clé étrangère sur une table des paramètres J'utilise un étudiant ( étudiant em>, enseignant em>) jumelé par colonne avec clé primaire à partir de plusieurs tables. P> Comment puis-je remplir la collection d'objets ( étudiant.parameters em>, enseignant.parameters em>) avec des enregistrements de la table des paramètres? p> Je vais essayer d'expliquer sur un exemple simple de école. p> Code principal EF premier Contexte de DB: p> à remplir paramètres em> collection de enseignant em> > Objet (et étudiant.paramètres aussi), je m'attends à ce que l'application exécute SQL comme: p> Pour l'utiliser comme ceci (pour la suppression de cascade aussi, si c'est possible): < / p>
3 Réponses :
Vous pouvez utiliser comme celui-ci espère que cela vous aide p> p>
Cela créera des colonnes pour l'étudiant et l'enseignant dans la base de données. Par design, il ne devrait y avoir que deux colonnes pour la liaison. J'ai plus de 2 tables qui ont fait référence à la table des paramètres et je ne veux pas créer% ID de nom de nom pour chaque table.
Pourriez-vous le faire comme ça et utiliser une table par stratégie de hiérarchie? https://entityframework.net/tph
Ceci est intéressant et devrait certainement fonctionner dans des cas où la classe est héritée de la classe de base. Il n'ya également aucun point d'utilisation de type entité Enum (je pense que deux tables partageront la même séquence principale). Mais lorsque les entités n'ont pas la même classe de base, cela échouera.
J'ai le même besoin et un schéma similaire que l'affiche originale. J'ai pu l'amener à travailler avec une stratégie TPH comme mentionné ci-dessus. Ensuite, j'ai eu une obligation d'activité que cette relation devait être modifiable et EF Core ne vous permettra pas de modifier la propriété qui est le discriminateur. La meilleure solution que j'ai trouvée était de créer une colonne calculée sur les entités associées qui stockées l'entitéype (renvoyant toujours la valeur liée à cette entitéype) et ce qui fonctionne jusqu'à présent. J'ai essayé d'utiliser une valeur fixe pour l'entitéype de hasprinicipipAlcyKey, mais j'ai reçu une erreur que EF Noyau ne le permet pas.
modelBuilder.Entity<ServiceNote>() .HasOne(sn => sn.Policy) .WithMany() .HasForeignKey(sn => new { sn.EntityId, sn.EntityType }) .HasPrincipalKey(policy => new { EntityId = policy.Id, EntityType = policy.ServiceNoteEntityType }); modelBuilder.Entity<ServiceNote>() .HasOne(sn => sn.Quote) .WithMany() .HasForeignKey(sn => new { sn.EntityId, sn.EntityType }) .HasPrincipalKey(quote => new { EntityId = quote.Id, EntityType = quote.ServiceNoteEntityType }); modelBuilder.Entity<ServiceNote>() .HasOne(sn => sn.Agency) .WithMany() .HasForeignKey(sn => new { sn.EntityId, sn.EntityType }) .HasPrincipalKey(agency => new { EntityId = agency.Id, EntityType = agency.ServiceNoteEntityType }); modelBuilder.Entity<ServiceNote>() .HasOne(sn => sn.Client) .WithMany() .HasForeignKey(sn => new { sn.EntityId, sn.EntityType }) .HasPrincipalKey(client => new { EntityId = client.Id, EntityType = client.ServiceNoteEntityType });