Von Access zu Entity Framework: Update 1

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Fehler bei Verwendung gleicher Variablennamen für Objekte und Collections

Bild 1: Fehler bei Verwendung gleicher Variablennamen für Objekte und Collections

In Ausgabe 5/2018 haben wir in zwei Artikeln gezeigt, wie Sie das Datenmodell und die Daten einer Access-Datenbank in ein Entity Data Model und darüber in eine SQL Server-Datenbank migrieren. Im vorliegenden Artikel finden Sie eine Optimierung der dort beschriebenen Prozeduren. Im Detail geht es darum, dass in Access-Tabellen manchmal Namen in Tabellen verwendet werden, die gleichzeitig Plural und Singular der enthaltenen Entität sind – wie zum Beispiel bei tblArtikel. Das führt bei unserer automatisierten Migration früher oder später zu Problemen. Daher erweitern wir unsere Prozeduren um die notwendigen Unterscheidungen.

Im Artikel Access zu WPF: Detailformulare mit Textfeldern aus der aktuellen Ausgabe beispielsweise erstellen wir das Code behind-Modul für eine WPF-Detailansicht der Einträge der Tabelle tblKunden beziehungsweise der Collection Kunden und der Klasse Kunde. Hier gelingt alles reibungslos, da wir beim Migrieren der Tabellen der Access-Tabelle in die DbSet-Definition und die Klassendefinition mit Kunde und Kunden entsprechende unterschiedliche Bezeichnungen verwenden konnten. Wenn wir die dort erarbeiteten Prozeduren nutzen wollen, um eine Detailansicht auf Basis eines Formulars zu erstellen, dass die Tabelle tblArtikel als Datensatzquelle verwendet, gelingt das nicht problemlos, da beim Migrieren des Datenmodells in das Data Entity Model aus tblArtikel sowohl das DbSet-Element Artikel als auch die Klasse Artikel generiert wurden. Das führt noch nicht zu Fehlern, aber wenn wir dann mit der Prozedur FormularNachWPF_CodeBehind die Code behind-Klasse erzeugen und dort einfügen, erhalten wir eine Reihe von Fehlermeldungen (siehe Bild 1).

Fehler bei Verwendung gleicher Variablennamen für Objekte und Collections

Bild 1: Fehler bei Verwendung gleicher Variablennamen für Objekte und Collections

Wie können wir das Problem lösen Eine Möglichkeit wäre, die Bezeichnungen im Code etwa der Code behind-Klasse so anzupassen, dass die verschiedenen mehrfach vorkommenden Variablen und Eigenschaftsbezeichnungen eindeutige Namen erhalten. Noch schöner wäre es allerdings, wenn wir direkt, wie auch beim Beispiel der Tabelle tblKunden, eindeutige Namen für die Klasse und die DbSet-Elemente hätten – in diesem Fall auch der besseren Lesbarkeit halber als Singular und Plural.

Erstellung des Entity Data Models anpassen

Und hier wollen wir ansetzen, indem wir die Prozedur EDMErstellen des Moduls mdlEDM aus dem Artikel Von Access zu Entity Framework: Datenmodell entsprechend anpassen. Das sieht dann ausschnittsweise wie folgt aus:

Public Sub EDMErstellen()
     ...
     For Each tdf In db.TableDefs
         If Not Left(tdf.Name, 4) = "MSys" Then
             strPK = ""
             If Not GetPrimaryKey(tdf.Name, strPK) Then
                ...
             Else
                 strEntity = Replace(strPK, "ID", "")
                 strEntities = Replace(tdf.Name, "tbl", "")
                 If strEntity = strEntities Then
                     Do While strEntity = strEntities
                         MsgBox "Plural und Singular der Bezeichnung der Entitäten (hier """ & strEntity _
                             & """) im Tabellennamen scheinen gleich zu sein." & vbCrLf & vbCrLf & "Geben Sie " _
                             & "nachfolgend eine Bezeichnung für den Singular der Entität ein und eine für den Plural."
                         strEntity = InputBox("Bezeichnung für den Singular/den Klassennamen der Entität """ _
                             & strEntity & """:", "Singular bestimmen", strEntity)
                         strEntities = InputBox("Bezeichnung für den Plural/den Namen der Auflistung der Entität """ _
                             & strEntities & """:", "Plural bestimmen", strEntities)
                     Loop
                 End If
                 ...
             End If
         End If
     Next tdf
     ...
End Sub

Nachdem wir die Bezeichnungen für die einzelne Entität und die Mehrzahl ermittelt und in strEntity und strEntities gespeichert haben, vergleichen wir diese in einer If…Then-Bedingung. Sind beide gleich, steigen wir in eine Do While-Schleifen ein. Diese zeigt zunächst eine Meldung wie in Bild 2 an.

Meldung bei Gleichheit von Singular und Plural

Bild 2: Meldung bei Gleichheit von Singular und Plural

Nach dieser Erklärung folgen zwei InputBox-Anweisungen, mit denen die Prozedur die Singular- und die Plural-Version für die zu erstellenden Klassen und DbSet-Elemente abfragt. Sind die beiden Werte von strEntity und strEntities nach dem Durchlauf der Do While-Schleife nicht mehr gleich, wird diese verlassen und die Prozedur erstellt die Klasse und die DbSet-Definition mit den neuen Namen.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar