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:

  1. Genom att ställa in statusen för dess inträde i sammanhanget:

     context.Entry(entity).State = EntityState.Added;
    
  2. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow