Из примеров, которые я видел в Интернете и в книге CodeFirst Framework Framework Entity Framework, когда у вас есть коллекция на обоих классах, EF создаст таблицу сопоставления, такую как MembersRecipes
, и первичный ключ из каждого класса будет ссылаться на эту таблицу.
Однако, когда я делаю это, я вместо этого получаю новое поле в таблице Recipes
с именем Member_Id
и a 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:
Ниже приведен другой подход, который я использовал, который не использует API Fluent и заменяет флаг 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; }