Projekt

Allgemein

Profil

Aktionen

Feature #80

geschlossen
JH

Datenbankmigration automatisch beim Start durchführen

Feature #80: Datenbankmigration automatisch beim Start durchführen

Von Julius Haman vor 6 Tagen hinzugefügt. Vor 6 Tagen aktualisiert.

Status:
Erledigt
Priorität:
Normal
Zugewiesen an:
-
Zielversion:
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: ist migrationNeeded, wird die Migration direkt ausgeführt (Logik aus ExecuteUpdateAsync in eine private Methode auslagern: IsMigrating, ShowMigrationProgress und Application.MigrationRunning setzen, MigrateAsync auf dem Threadpool, danach Settings.LoginDatabase/DatabasePath auf die neue Datei) und danach ohne Rekursion mit TryConnectAsync fortgefahren.
  • 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 und MigratedInfo in Strings.resx/Strings.de-DE.resx.
  • UpdateVisible steuert nur noch den Wiederholen-Button (nur nach fehlgeschlagener Migration sichtbar).

Zu beachten

  • Autologin (SplashScreenView.TryAutoLogin) wartet auf InitializeTask. Läuft die Migration in Initialize, greift der Autologin erst nach Abschluss und ConnectUserCommandEnabled ist dann frei. Nach einer manuellen Migration (Wiederholen-Button) bleibt das bisherige Verhalten (kein Autologin), da autoLoginHandled dort 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.
Aktionen

Auch abrufbar als: PDF Atom