Maison >développement back-end >C++ >Comment puis-je créer une table de jointure personnalisée avec des propriétés supplémentaires dans une relation plusieurs à plusieurs utilisant le code EF en premier?

Comment puis-je créer une table de jointure personnalisée avec des propriétés supplémentaires dans une relation plusieurs à plusieurs utilisant le code EF en premier?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-31 10:41:09494parcourir

How Can I Create a Custom Join Table with Additional Properties in a Many-to-Many Relationship using EF Code First?

Utilisation d'une table de connexion personnalisée dans plusieurs relations

Lorsque vous utilisez d'abord le code EF, il est impossible d'utiliser une table de connexion personnalisée pour établir une relation multi-pair. La table de connexion de gestion interne EF est cachée en dehors du modèle.

Méthode alternative: une paire de relations

Pour créer une table de connexion personnalisée avec des attributs supplémentaires, vous pouvez utiliser deux méthodes différentes de relations à un multiple:

Cela crée deux multi-relations indépendantes entre le membre et le membre et les commentaires et le membre. La table de connexion est représentée par la classe membre.

<code class="language-csharp">public class Member
{
    public int MemberID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection<MemberComment> MemberComments { get; set; }
}

public class Comment
{
    public int CommentID { get; set; }
    public string Message { get; set; }

    public virtual ICollection<MemberComment> MemberComments { get; set; }
}

public class MemberComment
{
    [Key, Column(Order = 0)]
    public int MemberID { get; set; }
    [Key, Column(Order = 1)]
    public int CommentID { get; set; }

    public virtual Member Member { get; set; }
    public virtual Comment Comment { get; set; }

    public int Something { get; set; }
    public string SomethingElse { get; set; }
}</code>
Les avantages de cette méthode

Cette méthode présente les avantages suivants:

permet les attributs supplémentaires sur la table de connexion (comme quelque chose et quelque chose).

Fournir des requêtes plus flexibles et un filtrage par les attributs de la table de connexion.
  • réserver la suppression du niveau par convenu.
  • Exemple de requête
En utilisant ce modèle, vous pouvez effectuer diverses requêtes, telles que:

Trouvez tous les commentaires avec des membres avec des noms de famille spécifiques:

  • Trouver des membres avec des noms spécifiques et leurs commentaires:
<code class="language-csharp">var commentsOfMembers = context.Members
    .Where(m => m.LastName == "Smith")
    .SelectMany(m => m.MemberComments.Select(mc => mc.Comment))
    .ToList();</code>
  • Filtrez les commentaires des membres via les attributs de la table de connexion:
<code class="language-csharp">var membersWithComments = context.Members
    .Where(m => m.LastName == "Smith")
    .Select(m => new
    {
        Member = m,
        Comments = m.MemberComments.Select(mc => mc.Comment)
    })
    .ToList();</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn