Freigeben über


Übersicht über die Erweiterbarkeit der Datenbankumgestaltung

Sie können die Funktionen der Datenbankumgestaltung erweitern, neue Umgestaltungstypen bereitzustellen oder neue Dateitypen umzugestalten. Sie können beide Erweiterbarkeitstypen für Datenbankumgestaltungen implementieren, indem Sie Funktionserweiterungen erstellen. Bevor Sie Funktionserweiterungen für Datenbankumgestaltungen erstellen, sollten Sie sich mit der Interaktion der Komponenten bei der Datenbankumgestaltung sowie mit den Positionen vertraut machen, an denen Sie diese Komponenten erweitern können.

Wenn die Datenbankumgestaltung für neue Zielen ausgeführt werden soll, können Sie benutzerdefinierte Umgestaltungscontributors erstellen, indem Sie das Erben von der abstrakten RefactoringContributor-Basisklasse festlegen. Beispielsweise können Sie das Umgestalten in Textdateien oder XML-Dateien im Datenbankprojekt unterstützen.

Wenn Sie neue Umgestaltungstypen aktivieren möchten, die nicht in Visual Studio Premium oder Visual Studio Ultimate enthalten sind, können Sie benutzerdefinierte Umgestaltungsvorgänge erstellen, indem Sie die Vererbung von der abstrakten RefactoringOperation-Basisklasse festlegen. Sie können z. B. einen neuen Umgestaltungstyp implementieren, um in einer Reihe separater IF-Anweisungen geschachtelte Bedingungen durch Wächterklauseln zu ersetzen.

Datenbankumgestaltung und Umgestaltungscontributors

Das folgende Diagramm veranschaulicht, wie bestimmte Umgestaltungstypen bei der Datenbankumgestaltung mit als Umgestaltungscontributors bezeichneten Komponenten behandelt werden.

Übersicht über die Erweiterbarkeit der Datenbankumgestaltung

Übersicht über die Erweiterbarkeit der Datenbankumgestaltung

Wenn Sie in der aktuellen Visual Studio-Sitzung zum ersten Mal einen Datenbankumgestaltungsvorgang anwenden, wird die Umgestaltungsfunktion zusammen mit allen Umgestaltungstypen und -contributors geladen. Der von Ihnen angegebene Befehl wird an die Umgestaltungsfunktion übergeben, und der angegebene Umgestaltungstyp wird gestartet. Die Umgestaltungscontributor-Manager durchläuft die einzelnen Contributors, die für den angegebenen Umgestaltungstyp registriert sind. Jeder Typ von Contributor wird auf ein anderes Objekt oder einen anderen Satz von Objekten angewendet, und jeder Typ kann einen anderen Datenfluss aufweisen.

Wenn Sie einen neuen Typ von Umgestaltung implementieren, müssen Sie die Contributors erstellen, die für die Unterstützung dieses Typs von Umgestaltungsvorgang erforderlich sind. Beispielsweise können Sie einen neuen Umgestaltungstyp erstellen, durch den geschachtelte Bedingungen durch Wächterklauseln ersetzt werden. Da bei diesem Typ von Umgestaltung lediglich die Texte von Prozeduren oder Funktionen geändert werden, nicht jedoch die Namen der Datenbankobjekte, müssen Sie nur einen Schemaobjektcontributor und einen Skriptcontributor erstellen.

Schemaobjektcontributors

Das folgende Diagramm zeigt den Datenfluss für einen Umgestaltungscontributor an, der Datenbankschemaobjekte behandelt.

Datenfluss eines Schemaobjektcontributors

Datenfluss für den Schemaobjektcontributor

Ein Schemaobjektcontributor aktualisiert die Definition eines Schemaobjekts. Der Contributor aktualisiert den Copy-on-Write-Speicher im Datenschemamodell. Das aktualisierte Modellelement wird an den Skript-DOM-Generator (Skript-Domänenobjektmodell) übergeben und verwendet, um ein aktualisiertes Skript-DOM zu generieren. Das aktualisierte Skript-DOM wird vom Skript-DOM-Diff-Modul mit dem Skript-DOM der ursprünglichen Definitionen dieses Objekts verglichen, und ein aktualisiertes Skript wird generiert.

Verweiscontributors

Das folgende Diagramm zeigt den Datenfluss für einen Verweiscontributor, der Verweise zwischen Objekten behandelt.

Datenfluss eines Verweiscontributors

Datenfluss für den Verweiscontributor

Ein Verweiscontributor ruft alle Verweise und deren Offsets vom Datenschemamodell ab und aktualisiert die Verweise im Copy-on-Write-Speicher des Datenschemamodells. Das aktualisierte Skript-DOM wird mit dem ursprünglichen Skript-DOM verglichen, und die Ergebnisse werden zum Aktualisieren der Skripts mit den geänderten Verweise verwendet.

Contributors für Datengenerierungspläne und Datenbankkomponententests

Das folgende Diagramm zeigt den Datenfluss von Contributors für Datengenerierungspläne und Datenbankkomponententests.

Datenfluss von Contributors für Datengenerierungspläne und Datenbankkomponententests

Datenfluss für DGen- und UnitTest-Contributors

Contributors für Datengenerierungspläne verwenden XPathNavigator, um Änderungen am Datengenerierungsplan, einer XML-Datei, zu suchen und zu aktualisieren.

Contributors für Datenbankkomponententests analysieren die RESX-Datei für den Datenbankkomponententest und extrahieren die in dieser Datei gespeicherten Skriptzeichenfolgen. Diese Skriptzeichenfolgen werden dann mit dem gleichen Datenfluss wie ein Datenbankskriptcontributor verarbeitet.

Datenbankskriptcontributors

Das folgende Diagramm zeigt den Datenfluss eines Datenbankskriptcontributors.

Datenfluss eines Datenbankskriptcontributors

Datenfluss für den Datenbankskriptcontributor

Ein Datenbankskriptcontributor behandelt Aktualisierungen an Skripts vor der Bereitstellung und Skripts nach der Bereitstellung, an anderen SQL-Skripts sowie an aus Datenbankkomponententests extrahierten SQL-Skriptzeichenfolgen. Der Modell-Generator erstellt ein Modell des Skripts im temporären Speicher des Datenschemamodells. Der temporäre Speicher wird verwendet, um ein geändertes Skript-DOM-Modell zu erstellen. Das geänderte Modell wird mit dem Modell aus dem ursprünglichen Skript verglichen, und anhand der Unterschiede wird das endgültige, aktualisierte Skript generiert.

Benutzerdefinierte Contributors

Sie können eigene benutzerdefinierte Contributors erstellen, um zusätzliche Umgestaltungsziele zu unterstützen, die in diesem Thema bisher nicht beschrieben wurden. Beispielsweise können Sie einen benutzerdefinierten Contributor erstellen, um Textdateien, Datenbankdokumentationen oder Ausgaben von Drittanbietertools zu aktualisieren. Sie müssen den richtigen Datenfluss bestimmen, der für die Unterstützung des Umgestaltungsziels erforderlich ist. Wenn der neue Zieltyp den Zieltypen eines vorhandenen Contributors ähnelt, sollten Sie sich über die weiter oben in diesem Thema beschriebenen Typen informieren.

Datenbankumgestaltungstypen

Durch Erstellen eines neuen Umgestaltungstyps können Sie neue Arten der Umgestaltung ausführen. Neue Umgestaltungstypen erstellen Sie, indem Sie mindestens vier Klassen implementieren, die von den folgenden Basisklassen erben:

  • RefactoringCommand
    Diese Klasse registrieren Sie, um einen neuen Typ von Umgestaltung bereitzustellen. Die Klasse gibt die Modellelemente an, für die der Befehl verfügbar sein soll, und ruft den Umgestaltungsvorgang auf, wenn der Benutzer auf den Befehl klickt.

  • RefactoringOperation
    Diese Klasse gibt an, wie der Umgestaltungsvorgang mit dem Vorschaufenster interagiert, gibt Eigenschaften für die Beschreibung des Vorgangs an und erstellt den ContributorInput.

  • ContributorInput
    Diese Klasse speichert die Eingabedaten im RefactoringContributor. Wenn sekundäre Contributors den Umgestaltungsvorgang für den primären Contributor abschließen müssen, müssen Sie möglicherweise mehrere von ContributorInput abgeleitete Klassen erstellen. Wenn Sie z. B. den Namen eines Objekts ändern, müssen Sie nicht nur das Objekt selbst, sondern auch alle Verweise auf dieses Objekt ändern. Daher erstellen Sie ein ContributorInput für das Symbol und eines für sämtliche Verweise auf dieses.

  • RefactoringContributor
    Diese Klasse erstellt anhand der Eingabe eine Liste von Änderungsvorschlägen. Wie beim ContributorInput müssen Sie möglicherweise mehrere von RefactoringContributor abgeleitete Klassen erstellen. Wenn Sie ein sekundäres ContributorInput benötigen, wird diese Eingabe vom primären RefactoringContributor erstellt. Sie müssen die Datenbankschema-Anbieter deklarieren, mit denen die Umgestaltungscontributors kompatibel sind. Sie müssen auch alle Contributors für einen Umgestaltungstyp und den Umgestaltungsbefehl registrieren.

Ziele der Datenbankumgestaltung

Sie können einen registrierten Typ von Umgestaltung für ein neues Ziel erweitern, z. B. für einen neuen Typ von Modellelement oder Datei. Um das Umgestalten für ein neues Ziel zu ermöglichen, müssen Sie neue Umgestaltungscontributors erstellen. Der neue Contributor muss für eines der definierten ContributorInputs für den betreffenden Umgestaltungstyp gültig sein. Sie erstellen ein neues Umgestaltungsziel oder einen neuen Contributor, indem Sie mindestens eine Klasse implementieren, die von der folgenden Basisklasse erbt:

  • RefactoringContributor
    Diese Klasse erstellt anhand der Eingabe eine Liste von Änderungsvorschlägen. Sie müssen die Datenbankschema-Anbieter deklarieren, mit denen die Umgestaltungscontributors kompatibel sind, und Sie müssen alle Contributors für einen Umgestaltungstyp registrieren.