Datenzugriff mit ADO.NET und .NET Core

Ein paar Tests

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Anhand einer Reihe von Testzugriffen zeigt der Trainer, wie der DB-Zugriff per Entity Framework Core abläuft.
12:35

Transkript

Und damit ist die Stunde der Wahrheit gekommen und die Zeit für einige kleine Tests. Die platziere ich hier in der MainMethode. Und gehe die, nachdem wir die Referenzen aufgelöst haben, Strg+Punkt ist da immer eine ganz gute Hilfe, Schritt für Schritt durch. Das Vorgehen ist eigentlich immer das Gleiche. Irgendwas möchte er an der Stelle noch nicht. Das heißt, da fehlt uns offensichtlich noch ein Package. Dann schauen wir gleich mal. Letztendlich ist das Vorgehen immer das Gleiche. Ich lege eine Instanz an des DbContext, hier genannt LibraryDbContext und letztendlich kann ich dann hingehen und innerhalb dieses Using Blocks auf die Daten zugreifen, indem ich zum Beispiel hingehe, wenn ich ein neues Element hinzufügen möchte, also quasi eine neue Zeile in meiner Datenbanktabelle, dann erzeuge ich ganz normal ein Objekt, hier ein Autoren Objekt, füge das entsprechend hinzu, indem ich einfach sage, context.Add(autor) und kann dann entsprechend sagen zum Schluss SaveChanges und dieses SaveChanges sorgt dann für alles Notwendige und schaut entsprechend, also eigentlich prüft das SaveChanges immer automatisch, hat sich irgendwas geändert? Wenn es sich geändert hat, ermittelt es die Art und Weise, wie das in der Datenbank persistiert werden kann. Und hier ist es einfach so, dass ich hingehen kann und den Autor, also das können wir natürlich auch umformulieren in die englische Schreibweise, damit das nicht so verwirrend aussieht, aber letztendlich wird das hinzugefügt, sieht, dass etwas neu ist und speichert das dann in der Datenbank ab an der Stelle. So, das Lesen funktioniert über Linq oder kann über Linq funktionieren. Das ist eine gute Sache und da sehe ich zum Beispiel, dass mir möglicherweise irgendetwas fehlt. Zum Beispiel müsste ich in der Lage sein, so etwas wie system.linq zu verwenden. Und Sie werden sehen, dass ich möglicherweise damit das Problem schon gefixt habe. Interessanterweise hat da Strg+Punkt nicht funktioniert. Nichtsdestotrotz das geht. Ich kann also eine Abfrage formulieren, die aussieht wie folgt, ich kann sagen from authors in context.Authors Das heißt, das ist ein Variablenname quasi, der auf diese Auflistung aufbaut mit der Einschränkung where authors.Name == "Thorsten Kansy" und dann gebe ich genau diese Elemente zurück. Das Interessante hier, das ist eine ganz grundlegende Sache beim Entity Framework, das ist nur die Definition einer Abfrage. Quasi das Pendant als würde ich mit ADO.NET arbeiten. Schlicht und ergreifend einen String hätte, wo das SELECT-Statement drin steht. Ausgeführt wird das Ganze erst dann, wenn ich es verwende. Das heißt, diese drei Zeilen, 31 bis 33, haben überhaupt keine Auswirkung auf die Datenbank. Da passiert überhaupt gar nichts. Erst in Zeile 35 wird entsprechend auf die Daten zugegriffen und in dem Moment wird die Abfrage erst ausgeführt und das Ergebnis entsprechend dann hier unten ausgegeben. Die Aktualisierung sieht immer so aus, dass ich die Daten erst in den Speicher hole und dann entsprechend modifiziere. Hier gehe ich zum Beispiel hin, suche mir einen Autor mit der ID 5 aus, die es hoffentlich auch gibt. Wenn es die gibt, also dafür ist diese Prüfung hier, also die FindMethode liefert mir Null zurück für den Fall, dass ich einen Primary Key, in dem Fall den Wert 5 angebe und dieser nicht existiert. Und für den Fall, dass die Variable nicht Null ist, kann ich entsprechend in diese Schleife reingehen und schlicht und ergreifend an der Stelle einige Bücher einfügen. Dann wieder wichtig, bei Änderungen jeglicher Art SaveChanges zum Schluss. Wenn ich das weglasse, passiert gar nichts logischerweise. Und damit sollten diesem Autor einige weitere Bücher beschert sein. Das Löschen funktioniert wieder auf die Art und Weise, dass ich diese Daten erst in den Speicher lese, dann entsprechend natürlich schaue, ob das Lesen erfolgreich war Hier benutze ich FirstOrDefault() als Methode, weil dieser Ausdruck hier würde mir quasi eine Menge von Autoren liefern. Ea könnte natürlich sein, dass ich weiß, es gibt nur einen mit dem Namen. Rein technisch könnten es aber mehrere sein. Deshalb muss ich mit FirstOrDefault sicherstellen, dass ich auch nur einen bekomme. Und wenn es kein gibt, bekomme ich Default und Default ist schlicht und ergreifend Null und das muss ich dann hier in Zeile 64 und 65 entsprechend prüfen. Und last but not least kann ich dann wieder saveChanges aufrufen. Dann scrolle ich mal dezent nach oben, entferne mit Strg+Shift+F9 die Break Points, setzte dafür erst einmal hier einen Break Point rein. Desweiteren werde ich dann keine brauchen, weil ich über Debugger.Break sowieso den Debugger dazu bringe, an der Stelle stehenzubleiben, egal ob ein Break Point gesetzt ist oder nicht. So, ich lasse das mal laufen. Dann füge ich das Element hinzu und das ist eine ganz normal Klasse im Speicher. Da ist nichts besonders Spannendes dran. Füge das hinzu und sage SaveChanges und jetzt wurde das in die Datenbank geschrieben. Das kann ich ganz einfach sehen, indem ich hier die Konsole wechsel. Da erkenne ich sofort, welches Statement ausgeführt wurde, nämlich im Kern INSERT INTO dann den Namen der Tabelle, Aufzählung der Spalten, die einzelnen Werte und sofort auch wieder die Rückgabe, damit das Entity Framework zum Beispiel weiß, welchen Autowert, welches Inkrement für die ID-Spalte verwendet wurde. Das bedeutet, wenn ich jetzt hier auf den Autoren schaue, dann sehe ich, es ist die ID 15 gewesen, die eingefügt wurde. Und ich kann dann zum Beispiel mal in die Datenbank wechseln, kann hier entsprechend in die Autoren Tabelle gehen. Und Sie sehen, offensichtlich Klon wurde im Jahr 2017 extrem verbreitet schon eingesetzt bei Autoren, aber es ist hier die ID 15. Ich kann hingehen, wenn ich möchte, das Ganze noch ein bisschen klarer machen. Ich kann zum Beispiel die Tabelle hier eliminieren respektive natürlich deren Inhalt und kann dies hier verwenden. Lösche das, das löscht diese Tabelle. Damit sind beide Tabellen jetzt erst einmal leer. Und ich kann das ganz normal laufen lassen. Und wenn ich hier auf Erneut Ausführen klicke, dauert es einen kleinen Moment, er führt genau das Gleiche aus. Ich würde jetzt erwarten, truncate table setzt den aktuellen Wert der Identity Spalte wieder auf den Start, dass es jetzt eine ID 1 gibt an der Stelle. Ich lasse das einmal durchlaufen. Und gehe auch direkt dann hier in das SQL Server Management Studio. Sie sehen, in der Tat, da wurde jemand eingefügt an der Stelle. So, dann kann ich eine Zeile natürlich lesen. Da gibt es mehrere Möglichkeiten. Ich kann hier so ein Prädikat definieren, ich könnte auch, wie ich es später beim Aktualisieren mache, über eine Methode gehen, die Find heißt, und die jetzt nicht soetwas wie den Namen bekommt, sondern schlicht und ergreifend den Wert für den Primary Key an der Stelle. Und wenn ich weitergehe, dann sehen Sie, dass jetzt wenn die Anzahl der Treffer ermittelt werden soll, dass dann genau dieses Statement ausgefüllt wird, SELECT COUNT (*) FROM WHERE Name gleich soundso. Das ist also das, was mir das Entity Framework im Hintergrund erzeugt. Wenn ich das jetzt weiterlaufen lasse, dann versucht er jetzt einen Autor zu finden mit der ID Nummer 5 und das wird ihm jetzt schlicht und ergreifend nicht gelingen. Das bedeutet, die Variabel ist Null an der Stelle. Das heißt, ich lege hier noch mal einen kleinen Stop ein. Da ich gerade schon zwei Klone eingefügt habe, kann ich jetzt einfach mal die 1 nehmen, lasse das Ganze soweit laufen. Den Break Point brauche ich nicht mehr. Den Break Point brauche ich an der Stelle, damit ich weiß, wie weit ich bin. So, und dann geht es nochmal weiter. Das heißt, jetzt greife ich nochmal auf die Datenbank zu. Und die Variable sollte in der Tat jetzt nicht Null sein. Das ist sie auch nicht. Dann kann ich die Bücher hinzufügen. Hier sind momentan 0 Bücher verzeichnet. Und es läuft durch die Schleife bis zu dem SaveChanges. Und wenn ich jetzt in dem Fenster gucke, dann sehe ich, dass hier die Bücher eingefügt wurden. Das Entity Framework ist relativ clever an der Stelle. Es kann Batch Inserts durchführen. Es nutzt die Fähigkeit des SQL Servers, dass ich einem INSERT-Statement beliebig viele Werte, Tuple mitgeben kann und das sieht dann entsprechend hier so aus. Das heißt, das Statement, oder genauso auch dieser Batch, dieser Block ist das Einfügen der Bücher zuständig, Gucken wir mal, ob es funktioniert hat. Wir gehen einfach mal in die Tabelle der Books rein. Und hier gibt es offensichtlich eine ganze Reihe Bücher, die die Autoren ID 1 haben. Das scheint also funktioniert zu haben. Sehr schön! So, dann geht es weiter. Und das Löschen ist eigentlich auch relativ einfach. Ich kann hingehen und mir wieder einen Autor raussuchen und den entsprechend löschen. SaveChanges Und kann dann zum Beispiel schauen, welche Autoren noch vorhanden sind. Offensichtlich ist der mit der ID 1 gelöscht worden. Dummerweise bleiben die Bücher aber erst einmal stehen. Das liegt jetzt aber nicht am Entity Framework, sondern das liegt ein bisschen an der der Einfachheit des Beispiels, weil letztendlich keine Fremdschlüsselbeziehung in der Datenbank angelegt ist. Das heißt, es wird im Wesentlichen erst einmal noch überhaupt gar nicht mal geprüft, ob die Tabellen überhaupt in Relation stehen. Die stehen erst einmal für sich einsam rum und da kann ich natürlich aus den einzelnen Tabellen etwas einfügen und rauslöschen, was möglicherweise überhaupt keine Entsprechung hat. Keinen Autor, das heißt ein Buch ohne Autor oder natürlich auch Autoren ohne Bücher, was logisch wäre, aber dann wäre der Autor auch kein Autor mehr. Das ist letztendlich aber nur der Einfachheit des Beispiels geschuldet. Ich kann das aufbauen in dem Modell. Ich kann ihm sagen, pass auf, es darf nur Bücher geben, die auch einen Autor haben und dann hätte ich entweder die Funktionalität so nutzen müssen, dass er mir beispielsweise die Bücher gleich mit löscht oder schlicht und ergreifend das Löschen des Autors nicht erlaubt, weil es noch Bücher gibt an der Stelle. Wie gesagt, das ist jetzt ein bisschen kurios, aber es sollte auch ein einfaches kleines Beispiel nur sein. Wie gesagt, ich verweise Sie auf andere Videos auf dieser Plattform, die wirklich sehr, sehr genau beschreiben, wie das Entity Framework funktioniert und wie auch entsprechend das Entity Framework Core funktioniert. Insofern das sollte nur einen kleinen Überblick geben. Sie haben gesehen, das ist eigentlich relativ einfach. Ich muss natürlich eine ganze Menge sozusagen drumherum an Ökosystemen verwenden, ich muss entsprechend über den ConnectionString, der muss aus der Konfiguration kommen, ich möchte natürlich loggen. Streng genommen brauche ich beides nicht. Ich könnte natürlich einfach hingehen, den ConnectionString in Code schreiben. Das würde die Sache noch ein bisschen vereinfachen. Das Schreiben der Entitäten Klassen der Modelle ist natürlich relativ einfach. Ich muss einfach nur notieren was ich in der Tat brauche. Und wenn die Migrations Funktionität mal funktioniert, dann kann ich hier wirklich hingehen, mir die Klassen schreiben und relativ einfach die Datenbank immer aktualisieren, testen, weiterentwickeln, Änderungen machen, die Datenbank wieder aktualisieren, und so weiter und sofort.

Datenzugriff mit ADO.NET und .NET Core

Lernen Sie, wie mit Ihrer .NET Core-Anwendung auf relationale Datenbanken wie z.B. SQL Server oder SQLite zugreifen.

2 Std. 49 min (28 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:12.04.2017

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!