Entity Framework
Beheersentiteit
Zoeken…
Opmerkingen
Entiteiten in Entity Framework kunnen verschillende statussen hebben die worden vermeld door de System.Data.Entity.EntityState- opsomming. Deze staten zijn:
Added
Deleted
Detached
Modified
Unchanged
Entity Framework werkt met POCO's. Dat betekent dat entiteiten eenvoudige klassen zijn die geen eigenschappen en methoden hebben om hun eigen status te beheren. Entiteitsstatus wordt beheerd door een context zelf, in ObjectStateManager
.
Dit onderwerp behandelt verschillende manieren om de status van een entiteit in te stellen.
Instellingsstatus Toegevoegd van een enkele entiteit
EntityState.Added
kan op twee volledig equivalente manieren worden ingesteld:
Door de status van de invoer in de context in te stellen:
context.Entry(entity).State = EntityState.Added;
Door het toe te voegen aan een
DbSet
van de context:context.Entities.Add(entity);
Wanneer u SaveChanges
, wordt de entiteit in de database ingevoegd. Wanneer het een identiteitskolom heeft (een automatisch ingestelde, automatisch oplopende primaire sleutel), zal na SaveChanges
de eigenschap primaire sleutel van de entiteit de nieuw gegenereerde waarde bevatten, zelfs wanneer deze eigenschap al een waarde had .
Instellingsstatus Toegevoegd van een objectgrafiek
Het instellen van de status van een objectgrafiek (een verzameling gerelateerde entiteiten) op Added
is anders dan het instellen van een enkele entiteit op Added
(zie dit voorbeeld ).
In het voorbeeld slaan we planeten en hun manen op:
Klasse model
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; }
}
Context
public class PlanetDb : DbContext
{
public property DbSet<Planet> Planets { get; set; }
}
We gebruiken een exemplaar van deze context om planeten en hun manen toe te voegen:
Voorbeeld
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);
Output:
Added
Added
Wat we hier zien is dat het toevoegen van een Planet
ook de staat van een maan instelt op Added
.
Wanneer u de status van een entiteit instelt op Added
, worden alle entiteiten in de navigatie-eigenschappen (eigenschappen die naar andere entiteiten "navigeren", zoals Planet.Moons
) ook gemarkeerd als Added
, tenzij ze al aan de context zijn gekoppeld .