オンラインとProgrammingEntityFramework CodeFirstの本で見た例から、両方のクラスにコレクションがある場合、EFはなどのマッピングテーブルを作成し、MembersRecipes各クラスの主キーはこのテーブルにリンクします。
Recipesただし、以下を実行すると、代わりに、というテーブルにMember_Idaという新しいフィールドが表示さRecipe_IdれMembersます。
これは2つの1対多の関係を作成するだけで、多対多の関係は作成しないため、メンバー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&AuthoronRecipeを所有者フラグに置き換える別のアプローチです。以下の例の名前もから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; }