Aktionen
Feature #80
geschlossen
JH
Datenbankmigration automatisch beim Start durchführen
Feature #80:
Datenbankmigration automatisch beim Start durchführen
Beginn:
Abgabedatum:
% erledigt:
0%
Geschätzter Aufwand:
Gefunden in Version:
Beschreibung
Aufbauend auf #79 (eine Statuszeile im Startfenster).
Ziel¶
Eine nötige Datenbankmigration wird beim Start (und nach "Datenbank auswählen") automatisch durchgeführt, ohne dass "Update durchführen" geklickt werden muss. Ohne Migration lässt sich die Datenbank ohnehin nicht öffnen, der Klick ist also keine echte Entscheidung. Die Nachläufe (LatLon, Belastung) laufen bereits automatisch.
Sicherheitsnetz (unverändert)¶
MigrationService.MigrateAsync verändert die Originaldatei nicht, sondern migriert eine Kopie mit Versions-Suffix; bei einem Fehler wird die Kopie gelöscht. Das Original bleibt als Backup erhalten und kann mit einer älteren ErControl-Version weiter geöffnet werden.
Umsetzung¶
SplashScreenViewModel.OnStartupAsync: istmigrationNeeded, wird die Migration direkt ausgeführt (Logik ausExecuteUpdateAsyncin eine private Methode auslagern:IsMigrating,ShowMigrationProgressundApplication.MigrationRunningsetzen,MigrateAsyncauf dem Threadpool, danachSettings.LoginDatabase/DatabasePathauf die neue Datei) und danach ohne Rekursion mitTryConnectAsyncfortgefahren.- Statuszeile: während der Migration "Migration läuft, bitte warten..." (sofort). Nach Erfolg statt "Verbunden." ein Hinweis, dass die Datenbank in die neue Datei (nur Dateiname) migriert wurde und das Original unverändert bleibt (neuer Text, z. B.
MigratedInfo), damit der neue Dateiname nicht überrascht. Der Text kann zweizeilig werden; Mindesthöhe der Zeile entsprechend prüfen, damit nichts springt. - Bei einem Fehler: kurze rote Meldung "Details stehen im Protokoll" (wie #79). Der Button bleibt nur für diesen Fall und heißt "Migration wiederholen" (bisher "Update durchführen"); er nutzt den vorhandenen Command
ExecuteUpdate. Kein automatischer Wiederholungszwang bei jedem Start. - Text
MigrationNeeded("Migration von X zu Y notwendig.") entfällt, neuer Text für den Wiederholen-Button undMigratedInfoinStrings.resx/Strings.de-DE.resx. UpdateVisiblesteuert nur noch den Wiederholen-Button (nur nach fehlgeschlagener Migration sichtbar).
Zu beachten¶
- Autologin (
SplashScreenView.TryAutoLogin) wartet aufInitializeTask. Läuft die Migration inInitialize, greift der Autologin erst nach Abschluss undConnectUserCommandEnabledist dann frei. Nach einer manuellen Migration (Wiederholen-Button) bleibt das bisherige Verhalten (kein Autologin), daautoLoginHandleddort schon gesetzt ist; das ist unkritisch. - Das Schließen des Fensters bleibt während der Migration gesperrt (
Application.MigrationRunning). - Auch bei einer über den Dialog gewählten alten Datenbank wird migriert (es entsteht eine neue Datei neben dem Original).
Prüfung¶
- Datenbank 2.2.3.53 und 3.0/3.1.x: Start ohne Klick, Statuszeile zeigt Migration, danach Migrationshinweis, Login möglich; Originaldatei unverändert, neue Datei mit Versions-Suffix.
- Mit Autologin: Login nach abgeschlossener Migration.
- Fehlerfall (z. B. schreibgeschütztes Verzeichnis): roter Hinweis, Protokolleintrag, Button "Migration wiederholen", keine Zwischendatei bleibt liegen.
- Kein vertikaler Sprung im Startfenster.
JH Von Julius Haman vor 6 Tagen aktualisiert
- Status wurde von Neu zu Erledigt geändert
Aktionen