Таблица сопоставления «многие ко многим»
Из примеров, которые я видел в Интернете и в книге CodeFirst Programming Entity Framework, если у вас есть коллекция для обоих классов, EF создаст таблицу отображения, такую какMembersRecipes
и первичный ключ от каждого класса будет ссылаться на эту таблицу.
Однако, когда я делаю ниже, я вместо этого получаю новое поле вRecipes
стол называетсяMember_Id
иRecipe_Id
вMembers
Таблица.
Это создает только два отношения «один ко многим», но не «многие ко многим», поэтому я мог бы связать члена 3 с рецептами (4,5,6) и рецептом 4 с членами (1,2,3) и т. Д.
Есть ли способ создать эту таблицу сопоставления? и если да, то как вы называете это что-то еще, например, «кулинарные книги»? ?
Спасибо
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:
Below is another approach I have tried which doesn't use the Fluent API and replaces the AuthorId
& Амп;Author
наRecipe
с флагом владельца, я также переименовал приведенный ниже пример изCookbooks
вMembersRecipes
, это также исправляет мою проблему, похожую на ответ, но, как уже упоминалось, имеет дополнительные последствия.
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; }
}
И вRecipe
& Амп;Member
классы, которые я изменил коллекции
public virtual IList<MembersRecipes> MembersRecipes { get; set; }