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
DbSet
des 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.