Das Visual Studio Datenbank Projekt bietet sich zur Verwaltung von Datenbanken während der Entwicklung einer Anwendung an.
Es bietet folgende wesentlichen Vorteile:
- Das Datenbank Schema steht unter fortlaufender Versionskontrolle.
- Quellcode und Datenbank werden als Einheit betrachtet. Ein Branching über den Quellcode und das Datenbank Schema hinweg wird hierdurch ermöglicht.
- Veränderungen des Schemas werden automatisch im Rahmen des Kompilierens der Projektmappe auf Konsistenz geprüft und auf die Entwicklungsdatenbank übertragen.
Für die Aktualisierung der Datenbank wird ein SQL Skript erzeugt. Dieses enthält genau die Anweisung, die notwendig sind, um die bestehende Datenbank auf das aktuelle Schema zu heben.
Für das Installieren einer Anwendung auf einem Zielsystem kann es jedoch sinnvoll sein, statt auf ein SQL Skript, auf ein Backup einer leeren Datenbank zurückzugreifen. Das Umkopieren und Einhängen eines solchen Templates ist in der Regel deutlich schneller und verkürzt hierdurch die Installationszeit der Anwendung.
Die Erstellung des Backups ist im Rahmen des Post-Deployment Skripts des Datenbank Projekts möglich. Hierbei ist eine Besonderheit zu beachten.
Im Post-Deployment Skript stehen nicht wie von Post-build Events anderer Projekttypen gewohnt die MSBuild Variablen zur Verfügung. Diese müssen explizit wie nachfolgend gezeigt eingefügt werden.
- Hinzufügen der benötigten Variablen zu den SQL Variablen
- Anpassung der Projekt Datei
Die Variable wird in einer neu angelegten ItemGroup referenziert. Als Wert wird der MSBuild Paraemter übergeben.
- Laden der Projektdatei
Nachdem die Anpassungen vorgenommen wurden, steht die Variable für eine Verwendung in dem Post-Deployment Skript zur Verfügung. Ein Datenbank Backup kann über den SQL Backup Befehl erstellt werden. Die Datei wird relativ zur Projektdatei im Ausführungsverzeichnis abgelegt.
1: /*
2: Post-Deployment Script Template
3: */
4:
5: print 'Create Database Template'
6:
7: BACKUP DATABASE [NETFactory.Database]
8: TO DISK= '$(ProjectDir)..\Bin\Database\NETFactory.Database.template'
9: WITH FORMAT,
10: MEDIANAME = 'NETFactory.Database.template',
11: MEDIADESCRIPTION = 'NETFactory Project Database Template';
12: GO