private static void NavigationsEigenschaftAuslesen() { Debug.WriteLine("NavigationsEigenschaftAuslesen"); try { using (var context = new dbTestITIN22Entities()) { var benutzer = context.AlleBenutzer.FirstOrDefault(); Console.WriteLine($"Waren des Benutzers {benutzer.Nachname}"); foreach (var rechnung in benutzer.AlleRechnungen) { foreach (var rechnungsWare in rechnung.AlleRechnungsWaren) { Console.WriteLine($"\t{rechnungsWare.Ware.Bezeichnung}"); } } } } catch (Exception ex) { Debug.WriteLine("Fehler in NavigationsEigenschaftAuslesen"); Debug.WriteLine("\t" + ex.Message); if (ex.InnerException != null) { Debug.WriteLine("\t\t" + ex.InnerException.Message); } Debugger.Break(); } }
private static void EinfacheAbfrage() { Debug.WriteLine("Einfache Abfrage"); try { using (var context = new dbTestITIN22Entities()) { foreach (var rolle in context.AlleRollen) { Console.WriteLine($"Rolle {rolle.Bezeichnung} ({rolle.ID})"); } Debug.WriteLine($"Anzahl Rollen {context.AlleRollen.Count()}"); } } catch (Exception ex) { Debug.WriteLine("Fehler in EinfacheAbfrage"); Debug.WriteLine("\t" + ex.Message); if (ex.InnerException != null) { Debug.WriteLine("\t\t" + ex.InnerException.Message); } Debugger.Break(); } }
private static void LazyLoading() { /// mache eine Verbindung auf using (var context = new dbTestITIN22Entities()) { /// hier werden eben NUR die Waren geladen Ware ware = context.AlleWaren.First(); /// dh: solange die Verbindung offen ist /// kann ich - ohne Probleme - andere Objekte nachladen /// => Lazy Loading! /// hier wird also die Kategorie nachgeladen Console.WriteLine(ware.Kategorie.Bezeichnung); } /// hier wird der Context verworfen UND die Verbindung geschlossen }
private static void EagerLoading() { Ware ware = null; /// mache eine Verbindung auf using (var context = new dbTestITIN22Entities()) { /// hier werden eben NUR die Waren geladen /// .Include(NAME_DER_NAVIGATIONS_EIGENSCHAFT) /// ist zwar technisch möglich, aber äußerst Fehler anfällig /// Stichwort: MAGIC STRING //ware = context.AlleWaren.Include("Kategorie").First(); /// Lösung: man kann hier auch eine Lambda Expression /// (TYPE SAFE!) verwenden, muss dazu allerdings einen /// zusätzlichen namespace einbauen ware = context.AlleWaren.Include(x => x.Kategorie).First(); } /// hier wird der Context verworfen UND die Verbindung geschlossen /// da ich die Kategorie allerdings mit EAGER Loading (noch vor dem Schließen der Verbindung) /// geladen habe, kann ich hier auf diese zugreifen Console.WriteLine(ware.Kategorie.Bezeichnung); }
public static AnmeldenErgebnis Anmelden(string benutzerName, string passwort) { Debug.WriteLine("BenutzerVerwaltung - AnmeldenErgebnis Anmelden(string benutzerName, string passwort)"); Debug.Indent(); AnmeldenErgebnis ergebnis = AnmeldenErgebnis.BenutzerNameUnbekannt; if (string.IsNullOrEmpty(benutzerName)) { throw new ArgumentNullException(nameof(benutzerName)); } else if (string.IsNullOrEmpty(passwort)) { throw new ArgumentNullException(nameof(passwort)); } else { try { Benutzer benutzer = null; using (var context = new dbTestITIN22Entities()) { benutzer = context.AlleBenutzer.Where(x => x.BenutzerName == benutzerName).FirstOrDefault(); } if (benutzer == null) { Debug.WriteLine($"Benutzername {benutzerName} unbekannt!"); ergebnis = AnmeldenErgebnis.BenutzerNameUnbekannt; } else if (!benutzer.Aktiv) { Debug.WriteLine($"Benutzername {benutzerName} gesperrt!"); ergebnis = AnmeldenErgebnis.BenutzerGesperrt; } else if (!Tools.ErmittleHashWert(passwort).SequenceEqual(benutzer.Passwort)) { Debug.WriteLine($"Passwort für {benutzerName} falsch!"); ergebnis = AnmeldenErgebnis.PasswortFalsch; } else { Debug.WriteLine($"Anmeldung für Benutzername {benutzerName} erfolgreich"); ergebnis = AnmeldenErgebnis.Erfolgreich; } } catch (Exception ex) { Debug.Indent(); Debug.WriteLine("Fehler in Anmelden(..)"); Debug.WriteLine(ex.Message); if (ex.InnerException != null) { Debug.Indent(); Debug.WriteLine(ex.InnerException.Message); Debug.Unindent(); } Debugger.Break(); Debug.Unindent(); } } Debug.Unindent(); return(ergebnis); }