物理的なフレームワークでは、ほとんどの関係には通常、内部管理の隠された接続テーブルが含まれます。ただし、場合によっては、追加の属性を備えたカスタム接続テーブルが必要になる場合があります。
より多くの関係の制限
残念ながら、Fluent APIの使用は、カスタム接続テーブルとのマルチペア関係を作成することはできません。 EFは、複数の関係を達成するために、隠された内部管理接続テーブルが必要です。
代替方法 それどころか、追加の属性を備えたカスタム接続テーブルを使用するには、2つの別々の1つの1つの1つの〜Multi -lelationshipを作成できます。各エンティティは、接続テーブルの1つになります。例
次のシーンを検討してください:
このモデルでは、追加の属性を備えたカスタム接続テーブルとしておよびで使用されています。
お問い合わせ関係
public class Member { public int MemberID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public virtual ICollection<MemberComment> MemberComments { get; set; } } public class Comment { public int CommentID { get; set; } public string Message { get; set; } public virtual ICollection<MemberComment> MemberComments { get; set; } } public class MemberComment { [Key, Column(Order = 0)] public int MemberID { get; set; } [Key, Column(Order = 1)] public int CommentID { get; set; } public virtual Member Member { get; set; } public virtual Comment Comment { get; set; } public int Something { get; set; } public string SomethingElse { get; set; } }
MemberComment
Something
SomethingElse
<方法>このメソッドの利点
この代替方法には、次の利点があります
<定>カスタム接続テーブル:接続テーブルの設計を制御し、必要に応じて他の属性を追加できます。
// 查找 LastName = "Smith" 的成员的所有评论 var commentsOfMembers = context.Members .Where(m => m.LastName == "Smith") .SelectMany(m => m.MemberComments.Select(mc => mc.Comment)) .ToList();
// 查找 LastName = "Smith" 的所有成员及其评论 var membersWithComments = context.Members .Where(m => m.LastName == "Smith") .Select(m => new { Member = m, Comments = m.MemberComments.Select(mc => mc.Comment) }) .ToList();
遅延荷重:テーブルを接続して、EFの遅延荷重関数を使用して関連するエンティティにアクセスできます。
概要
以上がエンティティフレームワークにカスタム参加テーブルとの多対称な関係を実装する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。