EDM: m:n-Beziehungen per Code First

Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

EDM: m:n-Beziehungen per Code First

Genau wie 1:n-Beziehungen können Sie mit Code First auch m:n-Beziehungen abbilden. Wer denkt, dass dazu wie in Datenbanksystem eine Art Verknüpfungsklasse notwendig ist, hat Recht – diese ist aber nur in bestimmten Fällen notwendig. Welche das sind und wie Sie die verschiedenen Arten einer m:n-Beziehung unter Code First abbilden, erfahren Sie in diesem Artikel. Außerdem zeigen wir, welche Datenmodelle beim Migrieren der Klassen in ein Datenbanksystem entstehen.

Vorbereitungen

Die Vorbereitungen laufen wie im Artikel EDM: 1:n-Beziehungen per Code First beschrieben.

Verschiedene Arten von m:n-Beziehungen

Wir kümmern uns in diesem Artikel um zwei verschiedene Arten von m:n-Beziehungen. Die erste Art geht davon aus, dass nur die Beziehung zwischen den Elementen zweier Klassen abgebildet werden soll. Das kann zum Beispiel die Beziehung zwischen Artikeln und Kategorien sein. Sie können jedem Artikel eine oder mehrere Kategorien zuweisen und jeder Kategorie ein oder mehrere Artikel. Dabei sind für eine Beziehung keine weiteren Informationen notwendig. Die zweite Art der Beziehung enthält zusätzliche Informationen zu jeder Kombination der beteiligten Klassen. Dabei kann es sich etwa die Beziehung zwischen einer Bestellung und den darin enthaltenen Artikeln handeln. Jede Bestellung kann mehrere Artikel enthalten und umgekehrt – insofern unterscheidet sich dies nicht von der einfachen m:n-Beziehung. Allerdings wollen wir in diesem Fall zu jeder Kombination noch weitere Informationen speichern, im einfachsten Fall die Menge der bestellten Artikel in einer Bestellung. Hier würden wir im Datenbanksystem einfach ein weiteres Feld zu der Verknüpfungstabelle hinzufügen. In der Modellierung der Klassen ergeben sich weitreichendere Unterschiede, wie die folgenden Beispiele zeigen werden.

Klassen für eine einfache m:n-Beziehung

Wir wollen zunächst eine einfache m:n-Beziehung abbilden, wie sie zwischen Artikeln und Kategorien vorgenommen wird. Dazu legen wir als Erstes die einfachen Klassen für diese beiden Entitäten an – in unserem Beispiel im Verzeichnis Data. Die Klasse enthält die Felder ID, Name und Price:

namespace EDMFluentAPI.Data {
     public class Article {
         public int ID { get; set; }
         public string Name { get; set; }
         public decimal Price { get; set; }
     }
}

Die Klasse für die Kategorien halten wir noch einfacher – sie soll nur das Feld ID und das Feld Name enthalten:

public class Category {
     public int ID { get; set; }
     public string Name { get; set; }
}

Wie stellen wir nun die Beziehung her? Das gelingt ganz einfach, indem wir beiden Klassen jeweils eine ICollection-Auflistung mit dem Typ des jeweils zu verknüpfenden Elements hinzufügen. Zunächst für die Klasse Article:

public class Article {
     ...
     public ICollection<Category> Categories { get; set; }
}

Für die Klasse Category sieht das andersherum aus:

public class Category {
     ...
     public ICollection<Article> Articles { get; set; }
}

Wir dürfen natürlich nicht vergessen, beide Klassen über entsprechende DbSet-Auflistungen zum Datenbankkontext hinzuzufügen:

public class CustomerManagementContext : DbContext {
     ...

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zahlenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Aktuell im Blog
Onlinebanking mit Access

Es ist geschafft: Endlich ist das Buch Onlinebanking mit Access fertiggeschrieben. Das war... [mehr]

Direktzugriff auf Tabellen und Felder

Die IntelliSense-Erweiterung für Tabellen und Felder hat mir soviel Spaß gemacht, dass ich gleich... [mehr]

IntelliSense für Tabellen und Felder

Wenn Sie mit dem VBA-Editor arbeiten und dort gelegentlich SQL-Anweisungen eingeben, müssen Sie... [mehr]

Download Access und SQL Server

Erfahren Sie, welche Schritte zum Download des aktuellen Stands des Buchs "Access und SQL Server"... [mehr]

Bilder in Access 2013

Wer die Bibliothek mdlOGL0710 von Sascha Trowitzsch oder ein ähnliches Modul aus meinen... [mehr]

Dynamische Ribbons

Immer wieder fragen Leser, wie man Ribbon-Elemente wie etwa Schaltflächen in Abhängigkeit... [mehr]

Die Blogmaschine

Einen kleinen Blog zusätzlich zum Shop zu betreiben ist eine tolle Sache. Hier lassen sich... [mehr]

Wegwerfadressen für die Newsletteranmeldung

Die Verwendung von Wegwerf-Adressen für die Nutzung aller möglichen Online-Dienste nimmt... [mehr]

Access und Facebook

Facebook und Access - das ist eine der wenigen Kombinationen, die ich noch nicht in die Mangel... [mehr]

Access und SQL Server - das Projekt

Mein neues Buch Access und SQL Server (gemeinsam mit Bernd Jungbluth) geht in die Endphase. Wer... [mehr]