在多對多關係中使用自定義聯接表
在使用EF Code First時,無法使用自定義聯接表建立多對多關係。 EF內部管理聯接表,並將其隱藏在模型之外。
替代方法:一對多關係
要創建具有附加屬性的自定義聯接表,可以使用兩種一對多關係的不同方法:
<code class="language-csharp">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; } }</code>
這在Member和MemberComment以及Comment和MemberComment之間創建了兩個獨立的一對多關係。聯接表由MemberComment類表示。
這種方法的優勢
這種方法具有以下優點:
示例查詢
使用此模型,您可以執行各種查詢,例如:
<code class="language-csharp">var commentsOfMembers = context.Members .Where(m => m.LastName == "Smith") .SelectMany(m => m.MemberComments.Select(mc => mc.Comment)) .ToList();</code>
<code class="language-csharp">var membersWithComments = context.Members .Where(m => m.LastName == "Smith") .Select(m => new { Member = m, Comments = m.MemberComments.Select(mc => mc.Comment) }) .ToList();</code>
<code class="language-csharp">var filteredCommentsOfMember = context.MemberComments .Where(mc => mc.MemberId == 1 && mc.Something == 99) .Select(mc => mc.Comment) .ToList();</code>
以上是如何首先使用EF代碼創建具有多對多關係中其他屬性的自定義加入表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!