0
votes

Comment créer 2 clés étrangères de chaîne pointant sur la même colonne de chaîne unique?

J'ai une entité "lecteur" qui a une propriété "GUID" de la chaîne de type, avec la contrainte unique.

J'ai une entité "playerdata", qui a les propriétés "playerguid", "adponentplayerguid" de type String.

Comment utiliser EF Noyau pour vous assurer que la playerguid et les propriétés de playerguid et d'opponentPlayerguid acceptent les valeurs que trouvez uniquement à l'intérieur du joueur.Le Propriété?

J'ai essayé diverses choses, de probablement 5+ Réponses différentes sur Stackoverflow, dont aucun ne m'a aidé à travailler cela.

Entité de playerData xxx

entité du joueur xxx


0 commentaires

3 Réponses :


1
votes

Vous devez spécifier une clé alternative sur le GUID. Puis configurez des clés étrangères. Faites-le en utilisant API fluide. Exemples d'utilisation ici: https://docs.microsoft.com / FR-US / EF / Core / Modélisation / Touches alternatives .


0 commentaires

0
votes

Dans votre classe dbcontext:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<PlayerData>()
        .HasOne(e => e.Player)
        .WithMany() // If its a one to one relationsship, specify 'WithOne()' here
        .HasForeignKey(e => e.PlayerGuid)
        .OnDelete(DeleteBehavior.Restrict);

    modelBuilder.Entity<PlayerData>()
        .HasOne(e => e.OpponentPlayer)
        .WithMany()
        .HasForeignKey(e => e.OpponentPlayerGuid)
        .OnDelete(DeleteBehavior.Restrict);
}


0 commentaires

0
votes

Si cela ne vous dérange pas que je demande, y a-t-il une raison particulière pour laquelle vous n'utilisez pas ID pour référencer le joueur et l'adhésion à l'adhésion? Ensuite, vous pouvez utiliser la clé étrangère pour référencer la table des joueurs.


2 commentaires

GUID est le champ / la propriété qui est utilisé pour suivre les entrées dans la DB.


Je pense que Playerguid est le candidat principal principal et la conception sera plus simple si cela est utilisé comme clé primaire.