Erstellen von Beziehungen zwischen Datasets in .NET Framework-Anwendungen
Hinweis
Datasets und verwandte Klassen sind ältere .NET-Technologien aus den frühen 2000er Jahren, die es Anwendungen ermöglichen, mit Daten im Arbeitsspeicher zu arbeiten, während die Anwendungen von der Datenbank getrennt sind. Die Technologien sind besonders nützlich für Anwendungen, die es Benutzern ermöglichen, Daten zu ändern und die Änderungen wieder in der Datenbank zu speichern. Obwohl sich Datasets als sehr erfolgreiche Technologie erwiesen haben, empfehlen wir, dass neue .NET-Anwendungen Entity Framework Core verwenden. Entity Framework bietet eine natürlichere Möglichkeit, mit tabellarischen Daten als Objektmodelle zu arbeiten, und verfügt über eine einfachere Programmierschnittstelle.
Datasets, die verwandte Datentabellen enthalten, verwenden DataRelation-Objekte, um übergeordnete/untergeordnete Beziehungen zwischen den Tabellen darzustellen und verwandte Datensätze zurückzugeben. Durch das Hinzufügen verwandter Tabellen zu Datasets mithilfe des Assistenten zum Konfigurieren von Datenquellen oder des DataSet-Designers wird das DataRelation-Objekt für Sie erstellt und konfiguriert.
Jedes DataRelation-Objekt hat zwei Funktionen:
Es kann die Datensätze verfügbar machen, die sich auf einen Datensatz beziehen, mit dem Sie arbeiten. Es stellt untergeordnete Datensätze bereit, wenn Sie sich in einem übergeordneten Datensatz (GetChildRows) befinden, und einen übergeordneten Datensatz, wenn Sie mit einem untergeordneten Datensatz (GetParentRow) arbeiten.
Es kann Einschränkungen für die referentielle Integrität erzwingen, z. B. das Löschen verwandter untergeordneter Datensätze beim Löschen eines übergeordneten Datensatzes.
Es ist wichtig, den Unterschied zwischen einer echten Verknüpfung und der Funktion eines DataRelation-Objekts zu verstehen. Bei einer echten Verknüpfung werden Datensätze aus übergeordneten und untergeordneten Tabellen entnommen und in ein einzelnes, flaches Recordset eingefügt. Wenn Sie ein DataRelation-Objekt verwenden, wird kein neues Recordset erstellt. Stattdessen verfolgt DataRelation die Beziehung zwischen Tabellen nach und hält übergeordnete und untergeordnete Datensätze synchron.
DataRelation-Objekte und -Einschränkungen
Ein DataRelation-Objekt wird auch verwendet, um die folgenden Einschränkungen zu erstellen und zu erzwingen:
Eine eindeutige Einschränkung, die garantiert, dass eine Spalte in der Tabelle keine Duplikate enthält
Eine Fremdschlüsseleinschränkung, mit der die referentielle Integrität zwischen einer übergeordneten und einer untergeordneten Tabelle in einem Dataset aufrechterhalten werden kann
Einschränkungen, die Sie in einem DataRelation-Objekt angeben, werden implementiert, indem automatisch geeignete Objekte erstellt oder Eigenschaften festgelegt werden. Wenn Sie mithilfe des DataRelation-Objekts eine Fremdschlüsseleinschränkung erstellen, werden der DataRelation-Eigenschaft des ChildKeyConstraint-Objekts Instanzen der ForeignKeyConstraint-Klasse hinzugefügt.
Eine eindeutige Einschränkung wird entweder durch einfaches Festlegen der Unique-Eigenschaft einer Datenspalte auf true
oder durch Hinzufügen einer Instanz der UniqueConstraint-Klasse zur DataRelation-Eigenschaft des ParentKeyConstraint-Objekts implementiert. Weitere Informationen zum Aussetzen von Einschränkungen in einem Dataset finden Sie unter Deaktivieren von Einschränkungen beim Füllen eines Datasets.
Regeln für die referentielle Integrität
Als Teil der Fremdschlüsseleinschränkung können Sie Regeln für die referentielle Integrität angeben, die an drei Punkten angewandt werden:
Wenn ein übergeordneter Datensatz aktualisiert wird
Wenn ein übergeordneter Datensatz gelöscht wird
Wenn eine Änderung akzeptiert oder abgelehnt wird
Die Regeln, die Sie erstellen können, werden in der Rule-Enumeration angegeben und in der folgenden Tabelle aufgeführt.
Regel für Fremdschlüsseleinschränkungen | Aktion |
---|---|
Cascade | Die am übergeordneten Datensatz vorgenommene Änderung (Aktualisieren oder Löschen) wird auch in verwandten Datensätzen in der untergeordneten Tabelle übernommen. |
SetNull | Untergeordnete Datensätze werden nicht gelöscht, aber der Fremdschlüssel in den untergeordneten Datensätzen wird auf DBNull festgelegt. Mit dieser Einstellung können untergeordnete Datensätze als „verwaist“ beibehalten werden, d. h., sie haben keine Beziehung zu übergeordneten Datensätzen mehr. Hinweis: Die Verwendung dieser Regel kann zu ungültigen Daten in der untergeordneten Tabelle führen. |
SetDefault | Der Fremdschlüssel in den zugehörigen untergeordneten Datensätzen wird auf seinen Standardwert festgelegt (wie durch die DefaultValue-Eigenschaft der Spalte festgelegt). |
None | Es werden keine Änderungen an verwandten untergeordneten Datensätzen vorgenommen. Mit dieser Einstellung können untergeordnete Datensätze Verweise auf ungültige übergeordnete Datensätze enthalten. |
Weitere Informationen zu Aktualisierungen in Datasettabellen finden Sie unter Rückspeichern von Daten in der Datenbank.
Beziehungen nur für Einschränkungen
Wenn Sie ein DataRelation-Objekt erstellen, können Sie angeben, dass die Beziehung nur zum Erzwingen von Einschränkungen verwendet wird, d. h., sie wird nicht für den Zugriff auf verwandte Datensätze verwendet. Sie können diese Option verwenden, um ein Dataset zu generieren, das etwas effizienter ist und weniger Methoden enthält als eine mit der Funktion für verwandte Datensätze. Sie können jedoch nicht auf die verwandten Datensätze zugreifen. Beispielsweise verhindert eine Einschränkungsbeziehung, dass Sie einen übergeordneten Datensatz löschen, der noch untergeordnete Datensätze enthält, und Sie können nicht über das übergeordnete Element auf die untergeordneten Datensätze zugreifen.
Manuelles Erstellen einer Datenbeziehung im DataSet-Designer
Wenn Sie Datentabellen mithilfe der Datenentwurfstools in Visual Studio erstellen, werden Beziehungen automatisch erstellt, sofern die Informationen aus der Quelle Ihrer Daten erfasst werden können. Wenn Sie Datentabellen manuell über die Registerkarte DataSet der Toolbox hinzufügen, müssen Sie die Beziehung möglicherweise manuell erstellen. Informationen zum programmgesteuerten Erstellen von DataRelation-Objekten finden Sie unter Hinzufügen von DataRelations.
Beziehungen zwischen Datentabellen werden im DataSet-Designer als Linien angezeigt, wobei eine Schlüssel- und Unendlichkeits-Glyphe den 1:n-Aspekt der Beziehung darstellt. Standardmäßig wird auf der Entwurfsoberfläche nicht der Name der Beziehung angezeigt.
Hinweis
Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in diesem Artikel. Möglicherweise verwenden Sie eine andere Edition von Visual Studio oder andere Umgebungseinstellungen. Weitere Informationen finden Sie unter Personalisieren der IDE.
So erstellen Sie eine Beziehung zwischen zwei Datentabellen
Öffnen Sie das Dataset im DataSet-Designer. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Erstellen eines Datasets im DataSet-Designer.
Ziehen Sie ein Relation-Objekt aus der DataSet-Toolbox auf die untergeordnete Datentabelle in der Beziehung.
Das Dialogfeld Beziehung wird geöffnet und füllt das Feld Untergeordnete Tabelle mit der Tabelle auf, auf die Sie das Relation-Objekt gezogen haben.
Wählen Sie im Feld Übergeordnete Tabelle die übergeordnete Tabelle aus. Die übergeordnete Tabelle enthält die Datensätze auf der „Einserseite“ einer 1:n-Beziehung.
Vergewissern Sie sich, dass im Feld Untergeordnete Tabelle die richtige untergeordnete Tabelle angezeigt wird. Die untergeordnete Tabelle enthält die Datensätze auf der „n-Seite“ einer 1:n-Beziehung.
Geben Sie im Feld Name einen Namen für die Beziehung ein, oder behalten Sie den Standardnamen bei, der auf den ausgewählten Tabellen basiert. Dies ist der Name des eigentlichen DataRelation-Objekts im Code.
Wählen Sie die Spalten aus, mit denen die Tabellen in den Listen Schlüsselspalten und Fremdschlüsselspalten verknüpft werden.
Wählen Sie aus, ob eine Beziehung und/oder eine Einschränkung erstellt werden soll.
Aktivieren oder deaktivieren Sie das Feld Geschachtelte Beziehung. Wenn Sie diese Option aktivieren, wird die Nested-Eigenschaft auf
true
festgelegt, und die untergeordneten Zeilen der Beziehung werden in der übergeordneten Spalte geschachtelt, sofern diese Zeilen als XML-Daten geschrieben oder mit XmlDataDocument synchronisiert werden. Weitere Informationen finden Sie unter Schachteln von DataRelations.Legen Sie die Regeln fest, die erzwungen werden sollen, wenn Sie Änderungen an Datensätzen in diesen Tabellen vornehmen. Weitere Informationen finden Sie unter Rule.
Klicken Sie auf OK, um die Beziehung zu erstellen. Zwischen den beiden Tabellen wird im Designer eine Beziehungslinie angezeigt.
So zeigen Sie einen Beziehungsnamen im DataSet-Designer an
Öffnen Sie das Dataset im DataSet-Designer. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Erstellen eines Datasets im DataSet-Designer.
Wählen Sie im Menü Daten den Befehl Beziehungsbezeichnungen anzeigen aus, um den Beziehungsnamen anzuzeigen. Deaktivieren Sie diesen Befehl, um den Beziehungsnamen auszublenden.