Tabela mapowania wielu do wielu
Z przykładów, które widziałem w Internecie oraz w książce Programming Entity Framework CodeFirst, gdy masz kolekcję na obu klasach, EF stworzyłoby tabelę odwzorowań, taką jakMembersRecipes
a klucz podstawowy z każdej klasy będzie linkował do tej tabeli.
Jednak gdy wykonam poniższe czynności, zamiast tego otrzymuję nowe pole wRecipes
tabela o nazwieMember_Id
i aRecipe_Id
wMembers
stół.
Który tworzy tylko dwie relacje jeden-do-wielu, ale nie wiele do wielu, więc mógłbym mieć Członka 3 połączonego z Przepisami (4,5,6) i Przepisem 4 powiązanym z Członkami (1,2,3) itd.
Czy istnieje sposób na utworzenie tej tabeli odwzorowań? a jeśli tak, to jak nazwać je czymś innym, takim jak „książki kucharskie”?
Dzięki
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; }
}
AKTUALIZACJA: Poniżej przedstawiam inne podejście, którego próbowałem, a które nie korzysta z Fluent API i zastępujeAuthorId
& Author
naRecipe
z flagą właściciela zmieniłem także nazwę z poniższego przykładuCookbooks
doMembersRecipes
, naprawia to również mój problem podobny do odpowiedzi, ale jak wspomniano ma dalsze implikacje.
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; }
}
i wRecipe
& Member
klasy zmieniłam kolekcje
public virtual IList<MembersRecipes> MembersRecipes { get; set; }