从我在网上和编程实体框架 CodeFirst 书中看到的示例中,当您在两个类上都有一个集合时,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; }
}
更新:
下面是我尝试过的另一种方法,它不使用 Fluent API 并用所有者标志替换AuthorId
& Author
on Recipe
,我还将下面的示例从Cookbooks
to重命名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; }