Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Entity Framework Core Grundkurs

Einsatz in einer Windows-10-App

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Der Einsatz des Entity Frameworks in Windows Apps war mit früheren Framework-Versionen nicht möglich, da diese eine Abhängigkeit von ADO.NET aufwiesen. Seit Entity Framework Core gehört dies der Vergangenheit an – somit steht dem Einsatz nichts mehr im Weg. Wie Sie auf eine SQLite-DB aus einer Universal-Windows-Platform-App (UWP) zugreifen können, lernen Sie in diesem Video.
13:59

Transkript

Das Entity Framework Core können Sie im Gegensatz zu älteren Versionen auch in Universal Windows Platform Apps nutzen. Wie das funktioniert, werde ich Ihnen in diesem Video zeigen. Dazu lege ich eine neue Universal Windows Platform App an und wähle dazu das Blank Template, also die leere App. Ich gebe meiner App einen Namen und klicke auf "Ok". Als Nächstes muss ich nun die Ziel-Version und die Minimum-Version des Windows SDK auswählen. Ich entscheide mich hier dafür, dass ich als Ziel-Version die Windows 10 Anniversary Edition nehme und als Minimum-Version die älteste verfügbare Windows 10 Version. Nachdem ich die App nun erstellt habe, muss ich als allererstes die Universal Platform Assemblies aktualisieren. Dies geschieht am leichtesten, indem ich in der Paket-Manager-Konsole den Befehl Update-Package eingebe, gefolgt vom Paketnamen Microsoft.NETCore.UniversalWindowsPlatform Anschließend kann ich jetzt das Entity Framework installieren. Und zwar muss ich bei einer Universal Windows Platform App das Paket für Sqlite installieren. Hintergrund ist, dass ich das Paket für den SQL Server nicht installieren kann, da ich keinen direkten Zugriff auf eine SQL Server-Datenbank habe. Also, installiere ich Microsoft.EntityFrameworkCore.Sqlite Als Nächstes installiere ich die Entity Framework Tools, damit ich eine Datenbank über Migrationen erstellen kann. Und das geschieht über Install-Package Microsoft.EntityFrameworkCore.Tools Und da die aktuell noch in der Vorabversion sind, muss ich das Pre-Fleck mit dranhängen. Was ich nun in dieser App machen möchte: ich möchte Einträge in der Form von ToDo-Einträgen verwalten. Dazu lege ich zunächst eine neue Klasse "ToDo" an. Und das Ganze erfolgt in einem Ordner mit dem Namen "Models", den ich jetzt anlege. Und die Klasse "ToDo", die bekommt von mir drei Eigenschaften, nämlich zunächst einmal ist sie public. Und dann bekommt die eine Eigenschaft "Id". Sie erhält eine Eigenschaft "Name", also der Name des "ToDo" und eine "boolesche"-Eigenschaft, ob sie schon erledigt ist oder nicht. Zusätzlich zur "ToDo"-Klasse benötige ich noch einen Kontext. Auch den lege ich mir an. Und über diesen Kontext werde ich einer Schwelle die Verbindung zur Sqlite-Datenbank herstellen. Also, nenne ich den "ToDoDb". Und dieser Kontext, der erbt von der Klasse DbContext. Die ist schon ermäßig erstmal nicht bekannt, darum muss ich den Namensraum Using Microsoft.EntityFrameworkCore importieren. Dieser "ToDoDb"-Kontext, der erhält von mir eine öffentliche Eigenschaft vom Typ "DbSet" für die Klasse "ToDo". Und diese Eigenschaft nenne ich "ToDos". Außerdem überschreibe ich die Methode "OnConfiguring", um hier die Datenbank anzugeben, zu der ich mich verbinden möchte. Und zwar ist das eine Sqlite-Datenbank. Und die nennen wir "todo.db" Als Nächstes würde ich ganz gerne eine Migration erzeugen, mit der ich dann später die Datenbank erstellen kann. Hier gibt es aktuell in der ersten Version vom Entity Framework Core noch eine kleine Unschönheit, und zwar muss ich eine Textdatei anlegen, die ich app.config nenne, in der ich ein Assembly Binding Redirect definiere. Ich zeige Ihnen das einmal schnell. Ich gehe also in den Bereich C# auf "Textdatei" und nenne diese Datei "app.config". Und ich habe hier nur eine Textdatei genommen, weil die standardmäßig leer ist. Und hier füge ich nun folgenden Code ein. Diesen Code, den erhalten Sie in der offiziellen Dokumentation des Entity Framework Core. Dort ist also genau beschrieben auch nochmal, was Sie erledigen müssen. Das Problem ist einfach, dass wenn ich hier eine Migration hinzufüge, und ich würde diese Assembly Binding Redirects nicht einfügen dann würde ich eine Fehlermeldung bekommen. So kann ich jetzt allerdings hingehen und kann eine erste Migration anlegen, die beschreiben wird, welche Änderungen an meiner Datenbank zu erledigen sind. Und da ich noch gar keine Datenbank habe, bedeutet das einfach, dass in dieser Migration gleich drinsteht, dass die Datenbank angelegt werden soll. Wenn er hier jetzt fertig ist, schauen wir uns die Migration auch einmal an. Hier haben wir sie. Und, wie eben schon gesagt, steht hier halt im Endeffekt drin, dass er eine neue Tabelle anlegen muss mit dem Namen "ToDos" und dass es hier die Spalten "Id", "Done" und "Name" gibt. Um diese Migration auch ausführen zu können, muss ich jetzt im Startup-Code meiner App folgende Zeile einfügen. Und diesen Startup-Code, den finden wir in der App.xaml.cs und hier im Konstruktor. Und was ich jetzt hier mache, ist: ich schreibe unter diesen zwei Zeilen using (var db = new ToDoDb()) Ich erzeuge also einen neuen Kontext. Und auch hier muss ich wieder den Namespace importieren. Und für diesen Kontext rufe ich jetzt die Eigenschaft "Database" auf. Und hier gibt es jetzt eine Methode "Migrate". Wie Sie sehen, gibt es die aktuell noch nicht. Das liegt daran, dass das eine Erweiterungsmethode ist, für deren Nutzung ich auch zunächst einen Namensraum importieren muss, nämlich den Namensraum "Microsoft.EntityFrameworkCore" So, was jetzt im Endeffekt geschieht, ist dass beim Starten der Anwendung geschaut wird, ob die Datenbank auf dem aktuellen Stand ist. Falls nicht, werden die notwendigen Migrationen ausgeführt. Und in meinem Fall ist das nur eine Migration. Jetzt brauchen wir, nachdem wir die Datenbank haben, nachdem wir die auch anlegen werden, auch noch eine kleine Oberfläche. Und die Oberfläche, die werde ich in die MainPage.xaml schreiben. Jetzt sehen Sie hier bei mir einen Fehler, und zwar sagt Visual Studio, dass ich eine neuere Version von Windows brauche, um die Inhalte im Designer anzeigen zu können, nämlich die Windows 10 Anniversary Edition. Das Problem ist, dass ich hier mit der Windows 10 Enterprise Edition arbeite, für die es aktuell noch keinen Update auf die Anniversary Edition gibt. Dementsprechend ignoriere ich diese Fehlermeldung einfach, indem ich das hochschiebe. Denn Designer benötige ich sowieso nicht, um hier vernünftig arbeiten zu können. Den nutze ich eher, um mal zu schauen, was so passiert, aber eigentlich weniger, um damit wirklich produktiv zu programmieren. Und nun füge ich hier meinen Code ein. Und zwar hätte ich ganz gerne ein StackPanel, also ein Element, in dem alle Elemente, die in den Import hereinkommen, untereinander dargestellt werden. Und als allererstes hätte ich ganz gerne eine TextBox. Und diese TextBox, der gebe ich einen Namen von "ToDoText". Dadrunter brauche ich einen Button. Und diesem Button konfiguriere ich das Klick-Event. Sage, das ist mein "Hinzufügen"-Button. Und ich könnte natürlich hier etwas sauberer mit einem View-Modell arbeiten, und das Ganze trennen. Und das sollten Sie in einer echten App auch machen. Aber für meine Demonstration des Entity Framework ist das jetzt nicht notwendig, sondern stattdessen brauche ich hier noch ein ListView. Und in meinem ListView brauche ich ein ItemTemplate. Und innerhalb des ListViews brauche ich ein DataTemplate. Und in dem DataTemplate sage ich: ich habe hier einen ganz einfachen TextBlock. Und der TextBlock, dessen Text-Eigenschaft, die binde ich an die Eigenschaft "ToDo" Name. So, zu guter Letzt werde ich hier oben auch noch das Loaded-Event verknüpfen. Und auch hier, wie gesagt, da lohnt es sich im Zweifelsfall, dann über ein Model-View- View-Model Muster nachzudenken. Aber das wäre für diese Anwendung doch ein wenig viel. Stattdessen gehe ich hier ins Code behind und mache nun folgendes. Im Loaded-Event öffne ich einen neuen Kontext über using (var db = new ToDoDb()) Und über Strg + Punkt kann ich wieder den Namensraum importieren. Und hier weise ich meinem ListView, dem ich übrigens noch einen Namen geben muss... "ToDoList" nenne ich den mal. Diesem ListView, dem weise ich jetzt also die Liste der ToDos zu, indem ich sage: ToDoList.ItemSource = db.ToDos.ToList() Damit wird schon dafür gesorgt, dass alle bisher erfassten ToDos angezeigt werden. Aber wir müssen noch ToDos erfassen können. Und dazu habe ich diesen Klick-Event-Handler. Und der macht nun folgendes. Ich lege hier einen neuen "ToDo"-Eintrag an, setze den Namen gleich dem "ToDoText". Und die Eigenschaft "Done" setze ich auf "False". Und jetzt erzeuge ich wieder einen neuen Kontext. Denn der alte Kontext, den ich hatte, der lebt ja nur während des Lade-Events. Und innerhalb dieses Kontextes füge ich jetzt der Eigenschaft "ToDos" mein neues "ToDo" zu. Und dann speichere ich alle Änderungen. Und zu guter Letzt binde ich meine ItemsSource erneut. Das Ganze ist ein wenig hemdsärmelig, das ist zugegeben. Aber hier soll auch nur die Nutzung des Entity Frameworks gezeigt werden. In einer echten App, wie gesagt, da würden Sie hingehen und mit einer Observable Collection arbeiten. Dort würden Sie mit einem View Model-Muster arbeiten. Für diese kleine Demonstration ist das aber nicht notwendig. So, hier habe ich meine App. Und hier oben habe ich mein Textfeld. Das wird jetzt leider hier von diesen Debug-Darstellungen ein wenig überschattet. Aber ich schreibe mal ein "ToDo Update der App auf MVVM Muster" und drücke auf "Hinzufügen". Und hier sehen wir unser erstes "ToDo". Und dann fügen wir das zweite noch hinzu: "UI schicker machen" Und jetzt kann ich meine App wieder schließen. Wenn ich sie jetzt erneut starte, dann sollten die beiden Einträge direkt in der Liste drinstehen. Und hier sehen wir sie auch direkt. Wir haben also gesehen, zum Hinzufügen des Entity Frameworks zu einer Universal Windows Platform App sind einige Schritte notwendig. Punkt Nummer 1 war: ich muss die Universal Windows Platform aktualisieren. Das geschah in der Paket-Manager-Konsole über den Befehl Update-Package Microsoft.NETCore.UniversalWindowsPlatform Danach musste über Install-Package MicrosoftEntityFrameworkCore.Sqlite das Entity Framework Core Sqlite Paket istalliert werden, welches eine Abhängigkeit an das Entity Framework Core hat. Danach brauchte ich die Entity Framework Core Tools. Die waren notwendig, um Migrationen ausführen zu können. Für die Migrationen benötigte ich außerdem noch eine app.config, in der ich ein Assembly Binding Redirect definiere fürs System.IO.FileSystem.Primitives, fürs System.Threading.Overlapped und für das System.ComponentModel.Annotations Diese Binding Redirects, die finden Sie, wie gesagt, in der offiziellen Entity Framework Dokumentation. Darüber hinaus benötigte ich eine Modell-Klasse. Und wie wir hier sehen, hatte keinerlei Abhängigkeiten ans Entity Framework, sondern die Abhängigkeiten, die befinden sich dann im DbContext. Hier hatte ich eine Eigenschaft vom Typ DbSet für die "ToDos". Und in der Methode "OnConfiguring" habe ich den Dateinamen angegeben. Dadurch, dass ich im Konstruktor der App-Klasse eine Migration ausgeführt habe über db.Database.Migrate würde dafür gesorgt, dass meine Datenbank stets den aktuellsten Stand der letzten Migration hat. In meiner Seite habe ich dann erstmal den Editor für xaml ausgeblendet, da ich das Update noch nicht installieren kann auf meinem Windows 10, was notwendig ist. Habe dann aber ganz normal im Text-Editor weiter arbeiten können, statt dem graphischen Editor. Und hier habe ich ein kleines ListView eingebaut, welches die "ToDo"-Einträge rendert. Außerdem habe ich eine TextBox und ein Button, mit denen ich "ToDos" hinzufügen kann. Diesen Code habe ich direkt in die Code behind, das heißt in die EventHandler geschrieben. Und in einer echten App, wie gesagt, würde ich hier eher Richtung Model-View-View-Model Muster gehen. Aber das wäre jetzt um einiges zu aufwendig geworden.

Entity Framework Core Grundkurs

Lernen Sie die Features von Microsofts O/R-Mapper kennen und wie Sie ihn in praktischen Anwendungen einsetzen.

2 Std. 29 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!