Z przykładów, które widziałem w Internecie oraz w książce Kodowanie pierwiastków w programie Entity Framework, jeśli masz kolekcję na obu klasach EF, utworzysz tabelę mapowania, taką jak MembersRecipes
i klucz podstawowy z każdej klasy łączyłoby się z tą tabelą.Tablica odwzorowań wielu do wielu
Jednak gdy wykonuję poniższe czynności, otrzymuję nowe pole w tabeli Recipes
o nazwie Member_Id
i Recipe_Id
w tabeli Members
.
Który tworzy tylko dwa relacje jeden do wielu, ale nie wielu do wielu, więc mógłbym mieć Członka 3 połączonego z Przepisami (4,5,6) i Przepis 4 połączonymi z Członkami (1,2, 3) itp.
Czy istnieje sposób utworzenia tego odwzorowania? a jeśli tak, to jak nazwać to coś innego, na przykład "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; }
}
UPDATE: Poniżej jest inne podejście Próbowałem który nie korzysta z Fluent API i zastępuje AuthorId
& Author
na Recipe
z flagą właściciela, mam również przemianowany poniżej przykład z Cookbooks
do MembersRecipes
, to również rozwiązuje mój problem podobny do odpowiedzi, ale jak wspomniano, ma dalsze konsekwencje.
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; }
}
aw Recipe
& Member
klas I zmienił kolekcje
public virtual IList<MembersRecipes> MembersRecipes { get; set; }
dotycząceTwojego zaktualizowania w żargonie Entity Framework, że wiele-do-wielu podejście zwane * wiele-do-wielu mapowania z ładunku * I nie wiem, dlaczego wymyślili bardzo wymyślny termin (ładunek); lub tylko ja, moim ojczystym językiem nie jest angielski :-) Zazwyczaj kojarzę słowo "ładunek" z wirusem komputerowym. W EF, ładunek nie jest czymś złowrogim, możesz zabezpieczyć swój projekt w przyszłości, ustawiając tabelę w encję gotową na ładunek (np. Poprzez dodanie dodatkowego identyfikatora jako klucza podstawowego, w konsekwencji musisz przekonwertować istniejące wiele-do-wielu złożonych pk na unikalne kolumny kompozytowe) z get-go –
W twoim przypadku nie dodałeś dodatkowego identyfikatora, utrzymałeś złożony klucz podstawowy. Flaga właściciela na stole to ładunek. –
@ MichaelBuen Ładunek to tabela odwzorowania (relacja), w której można umieścić dodatkowe dane (np. Datę utworzenia relacji) w. Jeśli powinieneś używać funkcji wiele-do-wielu z ukrytą tabelą, nie możesz dodać ładunku do relacji – RHAD