Entity Framework
Hantera enhetsstat
Sök…
Anmärkningar
Enheter i enhetsramen kan ha olika tillstånd som listas av System.Data.Entity.EntityState- uppräkningen. Dessa stater är:
Added
Deleted
Detached
Modified
Unchanged
Entity Framework fungerar med POCO: er. Det betyder att enheter är enkla klasser som inte har några egenskaper och metoder för att hantera sitt eget tillstånd. Enhetstillståndet hanteras av ett sammanhang i sig själv, i ObjectStateManager
.
Detta ämne täcker olika sätt att ange enhetstillstånd.
Inställningstillstånd Tillagd av en enda enhet
EntityState.Added
kan ställas in på två helt likvärdiga sätt:
Genom att ställa in statusen för dess inträde i sammanhanget:
context.Entry(entity).State = EntityState.Added;
Genom att lägga till det i en
DbSet
av sammanhanget:context.Entities.Add(entity);
När du ringer SaveChanges
enheten i databasen. När det har fått en identitetskolumn (en auto-set, automatisk uppräkning primärnyckel), sedan efter SaveChanges
, primärnyckeln egenskapen hos företaget kommer att innehålla nyligen genererade värde, även när den här egenskapen redan hade ett värde.
Inställningstillstånd Tillagd av en objektgraf
Ställa in tillståndet för en objektgraf (en samling relaterade enheter) till Added
är annorlunda än att ställa in en enda enhet som Added
(se detta exempel ).
I exemplet lagrar vi planeter och deras månar:
Klassmodell
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; }
}
Sammanhang
public class PlanetDb : DbContext
{
public property DbSet<Planet> Planets { get; set; }
}
Vi använder en instans av detta sammanhang för att lägga till planeter och deras månar:
Exempel
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);
Produktion:
Added
Added
Det vi ser här är att lägga till en Planet
också ställer in en månes tillstånd till Added
.
När du ställer ett företags tillstånd till Added
, alla enheter i dess navigations egenskaper (egenskaper som "navigera" till andra enheter, som Planet.Moons
) också är markerade som Added
, såvida de inte redan är ansluten till sammanhanget.