Heim >Backend-Entwicklung >C++ >Wie implementieren Sie viele zu viele Beziehungen mit benutzerdefinierten Join-Tabellen im Entity Framework?

Wie implementieren Sie viele zu viele Beziehungen mit benutzerdefinierten Join-Tabellen im Entity Framework?

DDD
DDDOriginal
2025-01-31 11:01:11899Durchsuche

How to Implement Many-to-Many Relationships with Custom Join Tables in Entity Framework?

Erstellen Sie mehrere -TO -viele Beziehungen mit einer benutzerdefinierten Verbindungstabelle

Im physischen Rahmen beinhalten die meisten Beziehungen normalerweise eine versteckte Verbindungstabelle eines internen Managements. In einigen Fällen benötigen Sie jedoch möglicherweise eine benutzerdefinierte Verbindungstabelle mit zusätzlichen Attributen.

Die Grenzen mehr Beziehungen

Leider kann die Verwendung von fließender API keine Multi -Pair -Beziehung mit einer benutzerdefinierten Verbindungstabelle erstellen. EF erfordert eine versteckte, interne Managementverbindungstabelle, um mehrere Beziehungen zu erreichen.

Alternative Methode

Im Gegenteil, um eine benutzerdefinierte Verbindungstabelle mit zusätzlichen Attributen zu verwenden, können Sie zwei separate eine -multi -Beziehung erstellen, die jeweils in eine der Verbindungstabellen entität ist. Beispiel

Betrachten Sie die folgende Szene:

In diesem Modell wird

als benutzerdefinierte Verbindungstabelle mit zusätzlichen Attributen

und

verwendet.
<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>

Anfragenbeziehung MemberComment Something SomethingElse Um diese Beziehungen abzufragen, können Sie den LINQ -Ausdruck verwenden:

Die Vorteile dieser Methode

Diese alternative Methode hat die folgenden Vorteile:
<code class="language-csharp">// 查找 LastName = "Smith" 的成员的所有评论
var commentsOfMembers = context.Members
    .Where(m => m.LastName == "Smith")
    .SelectMany(m => m.MemberComments.Select(mc => mc.Comment))
    .ToList();</code>
<code class="language-csharp">// 查找 LastName = "Smith" 的所有成员及其评论
var membersWithComments = context.Members
    .Where(m => m.LastName == "Smith")
    .Select(m => new
    {
        Member = m,
        Comments = m.MemberComments.Select(mc => mc.Comment)
    })
    .ToList();</code>

benutzerdefinierte Verbindungstabelle: Sie können das Design der Verbindungstabelle steuern und nach Bedarf andere Attribute hinzufügen.

Anfrage:

Sie können die Attribute in der Verbindungstabelle entsprechen und eine Verbindung herstellen.

    Verzögerungslast:
  • Sie können die Funktion der Verzögerungslast von EF verwenden, um auf verwandte Entitäten zuzugreifen, indem Sie Tabellen anschließen.
  • Zusammenfassung
  • Obwohl EF die multiple -to -multiple -Beziehungen mit einer benutzerdefinierten Verbindungstabelle nicht direkt unterstützt, bietet die hier beschriebene alternative Methode eine flexible Möglichkeit, solche Beziehungen im Datenmodell zu verarbeiten. Diese Methode bietet die Vorteile des Anpassens, Abfragens und Verzögerungsladens, damit Sie Ihre spezifischen Anforderungen erfüllen können.

Das obige ist der detaillierte Inhalt vonWie implementieren Sie viele zu viele Beziehungen mit benutzerdefinierten Join-Tabellen im Entity Framework?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn