首頁 >後端開發 >C++ >如何首先使用EF代碼創建具有多對多關係中其他屬性的自定義加入表?

如何首先使用EF代碼創建具有多對多關係中其他屬性的自定義加入表?

Patricia Arquette
Patricia Arquette原創
2025-01-31 10:41:09433瀏覽

How Can I Create a Custom Join Table with Additional Properties in a Many-to-Many Relationship using EF Code First?

在多對多關係中使用自定義聯接表

在使用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類表示。

這種方法的優勢

這種方法具有以下優點:

  • 允許在聯接表上定義附加屬性(例如Something和SomethingElse)。
  • 提供更靈活的查詢和按聯接表屬性過濾的功能。
  • 通過約定保留級聯刪除行為。

示例查詢

使用此模型,您可以執行各種查詢,例如:

  • 查找具有特定姓氏的成員的所有評論:
<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn