Entity Framework
Entitätsstatus verwalten
Suche…
Bemerkungen
Entitäten in Entity Framework können verschiedene Status haben, die in der System.Data.Entity.EntityState- Enumeration aufgelistet sind. Diese Zustände sind:
Added
Deleted
Detached
Modified
Unchanged
Entity Framework arbeitet mit POCOs. Dies bedeutet, dass Entitäten einfache Klassen sind, die keine Eigenschaften und Methoden zum Verwalten ihres eigenen Status haben. Der Entitätsstatus wird im ObjectStateManager von einem Kontext selbst verwaltet.
In diesem Thema werden verschiedene Möglichkeiten zum Festlegen des Entitätsstatus beschrieben.
Einstellungsstatus Hinzugefügt von einer einzelnen Entität
EntityState.Added kann auf zwei völlig gleichwertige Arten festgelegt werden:
Durch Festlegen des Status des Eintrags im Kontext:
context.Entry(entity).State = EntityState.Added;Durch Hinzufügen zu einem
DbSetdes Kontextes:context.Entities.Add(entity);
Beim Aufruf von SaveChanges wird die Entität in die Datenbank eingefügt. Wenn es eine Identitätsspalte (einen automatisch festgelegten, automatisch inkrementierenden Primärschlüssel) SaveChanges , enthält die Primärschlüsseleigenschaft der Entität nach SaveChanges den neu generierten Wert, auch wenn diese Eigenschaft bereits einen Wert hatte .
Einstellungsstatus Hinzugefügt eines Objektdiagramms
Das Festlegen des Zustands eines Objektdiagramms (einer Sammlung verwandter Entitäten) auf Added unterscheidet sich vom Festlegen einer einzelnen Entität als Added (siehe dieses Beispiel ).
Im Beispiel speichern wir Planeten und ihre Monde:
Klassenmodell
public class Planet
{
public Planet()
{
Moons = new HashSet<Moon>();
}
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Moon> Moons { get; set; }
}
public class Moon
{
public int ID { get; set; }
public int PlanetID { get; set; }
public string Name { get; set; }
}
Kontext
public class PlanetDb : DbContext
{
public property DbSet<Planet> Planets { get; set; }
}
Wir verwenden eine Instanz dieses Kontexts, um Planeten und ihre Monde hinzuzufügen:
Beispiel
var mars = new Planet { Name = "Mars" };
mars.Moons.Add(new Moon { Name = "Phobos" });
mars.Moons.Add(new Moon { Name = "Deimos" });
context.Planets.Add(mars);
Console.WriteLine(context.Entry(mars).State);
Console.WriteLine(context.Entry(mars.Moons.First()).State);
Ausgabe:
Added
Added
Was wir hier sehen, ist, dass das Hinzufügen eines Planet auch den Status eines Mondes auf Added .
Wenn ein Unternehmen des Staates zu Einstellung Added , alle Einheiten in ihren Navigationseigenschaften (Eigenschaften , dass „navigieren“ zu anderen Einrichtungen, wie Planet.Moons ) werden auch als markiert Added , soweit sie nicht bereits mit dem Kontext verbunden sind.