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