Maison > développement back-end > C++ > Comment implémenter des relations multiples-à-plusieurs avec des tables de jointure personnalisées dans Entity Framework?

Comment implémenter des relations multiples-à-plusieurs avec des tables de jointure personnalisées dans Entity Framework?

DDD
Libérer: 2025-01-31 11:01:11
original
921 Les gens l'ont consulté

How to Implement Many-to-Many Relationships with Custom Join Tables in Entity Framework?

Créez des relations multiples à de nombreuses personnes avec une table de connexion personnalisée

Dans le cadre physique, la plupart des relations impliquent généralement un tableau de connexion caché d'une gestion interne. Cependant, dans certains cas, vous pouvez avoir besoin d'une table de connexion personnalisée avec des attributs supplémentaires.

Les limites de plus de relations

Malheureusement, l'utilisation de l'API fluide ne peut pas créer une relation multi-pair avec une table de connexion personnalisée. EF nécessite une table de connexion de gestion interne cachée pour réaliser plusieurs relations.

Méthode alternative

Au contraire, pour utiliser une table de connexion personnalisée avec des attributs supplémentaires, vous pouvez créer deux liens de relation One-To -Multi séparés, chaque entité à l'une des tableaux de connexion. Exemple

Considérez la scène suivante:

Dans ce modèle,

est utilisé comme une table de connexion personnalisée avec des attributs supplémentaires

et

.
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; }
}
Copier après la connexion

<询> Relation de l'enquête MemberComment Something SomethingElse Pour interroger ces relations, vous pouvez utiliser l'expression Linq:

<方法> Les avantages de cette méthode

Cette méthode alternative présente les avantages suivants:
// 查找 LastName = "Smith" 的成员的所有评论
var commentsOfMembers = context.Members
    .Where(m => m.LastName == "Smith")
    .SelectMany(m => m.MemberComments.Select(mc => mc.Comment))
    .ToList();
Copier après la connexion
// 查找 LastName = "Smith" 的所有成员及其评论
var membersWithComments = context.Members
    .Where(m => m.LastName == "Smith")
    .Select(m => new
    {
        Member = m,
        Comments = m.MemberComments.Select(mc => mc.Comment)
    })
    .ToList();
Copier après la connexion

Tableau de connexion personnalisé: Vous pouvez contrôler la conception de la table de connexion et ajouter d'autres attributs au besoin.

Enquête:

Vous pouvez dépister et vous connecter en fonction des attributs de la table de connexion.

    Chargement de retard:
  • Vous pouvez utiliser la fonction de chargement de retard d'EF pour accéder aux entités liées en connectant les tables.
  • Résumé
  • Bien que EF ne prenne pas directement en charge les relations multiples à-mortile avec une table de connexion personnalisée, la méthode alternative décrite ici fournit un moyen flexible de gérer de telles relations dans le modèle de données. Cette méthode offre les avantages de la personnalisation, de la requête et du chargement de retard, afin que vous puissiez répondre à vos besoins spécifiques.

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal