0
votes

Collection de cartes à l'aide de la clé étrangère avec une valeur constante

J'ai conçu la table pouvant contenir des paramètres ( paramètres ) pour des enregistrements de plusieurs tables ( étudiants , enseignants ).

une clé étrangère sur une table des paramètres J'utilise un étudiant ( étudiant , enseignant ) jumelé par colonne avec clé primaire à partir de plusieurs tables.

Comment puis-je remplir la collection d'objets ( étudiant.parameters , enseignant.parameters ) avec des enregistrements de la table des paramètres?

Je vais essayer d'expliquer sur un exemple simple de école.

Code principal EF premier Contexte de DB: xxx

à remplir paramètres collection de enseignant > Objet (et étudiant.paramètres aussi), je m'attends à ce que l'application exécute SQL comme: xxx

Pour l'utiliser comme ceci (pour la suppression de cascade aussi, si c'est possible): < / p> xxx


0 commentaires

3 Réponses :


-1
votes

Vous pouvez utiliser comme celui-ci xxx

espère que cela vous aide


1 commentaires

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.



1
votes

Pourriez-vous le faire comme ça et utiliser une table par stratégie de hiérarchie? https://entityframework.net/tph xxx


1 commentaires

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.



0
votes

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


0 commentaires