Plusieurs-à-plusieurs table de mappage

À partir d'exemples que j'ai vu en ligne et dans une Programmation Entity Framework CodeFirst livre, quand vous avez une collection sur les deux classes EF serait de créer une table de mappage comme MembersRecipes et la clé primaire de chaque classe qui permettrait de relier cette table.

Cependant, quand je fais les ci-dessous, j'ai plutôt obtenir un nouveau champ dans la Recipes table appelée Member_Id et un Recipe_Id dans le Members table.

Qui crée seulement deux un-à-plusieurs liens, mais pas plusieurs-à-plusieurs pour que je puisse Membre 3 liée à des Recettes (4,5,6) et de la Recette 4 lié aux Membres (1,2,3), etc.

Est-il un moyen de créer cette table de correspondance? et si oui, comment avez-vous nom d'autre chose comme "livres de cuisine" ?

Grâce

    public abstract class Entity {
        [Required]
        public int Id { get; set; }
    }   

    public class Member : Entity {
        [Required]
        public string Name { get; set; }

        public virtual IList<Recipe> Recipes { get; set; }
    }

    public class Recipe : Entity {  
        [Required]
        public string Name { get; set; }

        [ForeignKey("Author")]
        public int AuthorId { get; set; }
        public virtual Member Author { get; set; }

            ....

        public virtual IList<Member> Members { get; set; }
    }

Mise à JOUR:
Ci-dessous est une autre approche que j'ai essayé qui n'utilise pas l'API Fluent et remplace la AuthorId & Author sur Recipe avec un propriétaire drapeau, j'ai aussi renommé l'exemple ci-dessous à partir de Cookbooks à MembersRecipes, cela résout aussi ma question similaire à la réponse, mais comme mentionné a d'autres conséquences.

public class MembersRecipes {

    [Key, Column(Order = 0)]
    [ForeignKey("Recipe")]
    public int RecipeId { get; set; }
    public virtual Recipe Recipe { get; set; }

    [Key, Column(Order = 1)]
    [ForeignKey("Member")]
    public int MemberId { get; set; }
    public virtual Member Member { get; set; }

    public bool Owner { get; set; }
}

et dans Recipe & Member classes, j'ai changé les collections de

public virtual IList<MembersRecipes> MembersRecipes { get; set; }
  • Concernant votre mise à jour, dans l'Entity Framework le langage que plusieurs-à-plusieurs approche est appelée plusieurs-à-plusieurs avec cartographie de la charge utile je ne sais pas pourquoi ils viennent avec un très chics terme(charge utile), ou c'est juste moi, ma langue maternelle n'est pas l'anglais 🙂 j'ai l'habitude d'associer le mot de charge utile avec un virus informatique. En EF, la charge utile n'est pas quelque chose de sinistre, vous pouvez l'avenir de votre conception en faisant votre table une charge utile-prêt entité(par exemple, Par l'ajout de l'ID comme clé primaire, par conséquent, vous avez besoin de convertir plusieurs-à-plusieurs composite pk unique des colonnes composites) à partir de l'obtenir-aller
  • Dans votre cas, vous n'avez pas d'y ajouter une ID, vous avez maintenu la clé primaire composite. Le Propriétaire du pavillon, sur la table, la charge utile
  • La charge utile se réfère à la table de correspondance (relation) où vous pouvez mettre des données supplémentaires (par exemple la date de création de la relation) dans . Si vous devez utiliser EF plusieurs-à-plusieurs avec une table masquée, vous ne pouvez pas ajouter une charge utile de la relation
  • Pour moi, quand j'ai eu ce problème, c'est parce que l'un de mes propriétés de navigation a été un List et l'autre était une IEnumerable. J'ai changé pour les deux listes, puis Add-Migration a commencé à générer une XR table au lieu de simplement le FK propriétés.
InformationsquelleAutor Pricey | 2012-07-08