Einfügen, Löschen und Ändern bei Entity Framework Core 16.03.2017, 00:00 Uhr

In einem Rutsch

Beim Arbeiten mit Daten verhält sich Entity Framework Core anders als bisher gewohnt.
Der Entwickler einer Entity-Framework-Core-Anwendung kann aus der Datenbank geladene Entitätsobjekte jederzeit wieder zurückschreiben. Er muss diese dabei weder vor der Schreiboperation „ankündigen“ noch sie nachher „anmelden“. Die Kontextklasse von Entity Framework (EF) Core verfolgt alle Änderungen an den Objekten (change tracking). Die Änderungsverfolgung findet jedoch nicht statt, wenn die Objekte im speziell – zum Beispiel mit AsNoTracking() – zu aktivierenden No-Tracking-Modus geladen wurden oder die Kontextinstanz inzwischen nicht mehr besteht.
Listing 1: Die freien Plätze um zwei reduzieren
public static void EinfacheUpdate()

{

  Console.WriteLine("--- Flug ändern");

  int FlugNr = 101;

  using (WWWingsContext ctx = new WWWingsContext())

  {

    var f = ctx.FlugSet.SingleOrDefault(

      x => x.FlugNr == FlugNr);



    Console.WriteLine($"Nach dem Laden: Flug #"

      + "{f.FlugNr}: {f.Abflugort}->{f.Zielort} hat "

      + "{f.FreiePlaetze} freie Plätze! Zustand des "

      + "Flug-Objekts: " + ctx.Entry(f).State);



    f.FreiePlaetze -= 2;  // Änderung 1

    f.Memo = $"Letzte Änderung durch Benutzer "

      + "[System.Environment.UserName} am "

      + "{DateTime.Now}."; ;  // Änderung 2



    Console.WriteLine($"Nach der Änderung: Flug #"

      + "{f.FlugNr}: {f.Abflugort}->{f.Zielort} hat "

      + "{f.FreiePlaetze} freie Plätze! Zustand des "

      + "Flug-Objekts: " + ctx.Entry(f).State);



    try

    {

      var anz = ctx.SaveChanges();

      if (anz == 0) Console.WriteLine(

        "Problem: Keine Änderung gespeichert!");

      else Console.WriteLine("Anzahl gespeicherter "

        + "Änderungen: " + anz);

      Console.WriteLine($"Nach dem Speichern: Flug #"

        + "{f.FlugNr}: {f.Abflugort}->{f.Zielort} "

        + "hat {f.FreiePlaetze} freie Plätze! "

        + "Zustand des Flug-Objekts: " "

        + ctx.Entry(f).State); 

    }

    catch (Exception ex)

    {

      Console.WriteLine("Fehler: " + ex.ToString());

    } 

  }

}

dotnetpro

Sie wollen zukünftig auch von den Vorteilen eines plus-Abos profitieren? Werden Sie jetzt dotnetpro-plus-Kunde
  • 2 Monate Gratis testen
  • Über 4.000 qualifizierte Fachartikel
  • Auf jedem Gerät verfügbar