Entity Framework
Gestire lo stato dell'entità
Ricerca…
Osservazioni
Le entità in Entity Framework possono avere vari stati che sono elencati dall'enumerazione System.Data.Entity.EntityState . Questi stati sono:
Added
Deleted
Detached
Modified
Unchanged
Entity Framework funziona con POCOs. Ciò significa che le entità sono classi semplici che non hanno proprietà e metodi per gestire il proprio stato. Lo stato dell'entità è gestito da un contesto stesso, in ObjectStateManager
.
Questo argomento copre vari modi per impostare lo stato dell'entità.
Stato di impostazione Aggiunto di una singola entità
EntityState.Added
può essere impostato in due modi equivalenti:
Impostando lo stato della sua voce nel contesto:
context.Entry(entity).State = EntityState.Added;
Aggiungendolo a un
DbSet
del contesto:context.Entities.Add(entity);
Quando si chiama SaveChanges
, l'entità verrà inserita nel database. Quando ha una colonna Identity (una chiave primaria auto-impostata, auto-incrementante), quindi dopo SaveChanges
, la proprietà della chiave primaria dell'entità conterrà il valore appena generato, anche quando questa proprietà ha già un valore .
Stato di impostazione Aggiunto di un grafico dell'oggetto
Impostare lo stato di un oggetto grafico (una raccolta di entità correlate) su Added
è diverso rispetto all'impostazione di una singola entità come Added
(vedere questo esempio ).
Nell'esempio, memorizziamo i pianeti e le loro lune:
Modello di classe
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; }
}
Contesto
public class PlanetDb : DbContext
{
public property DbSet<Planet> Planets { get; set; }
}
Usiamo un'istanza di questo contesto per aggiungere pianeti e le loro lune:
Esempio
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);
Produzione:
Added
Added
Quello che vediamo qui è che l'aggiunta di un Planet
imposta anche lo stato di una luna su Added
.
Quando si imposta lo stato di un'entità su Added
, tutte le entità nelle sue proprietà di navigazione (proprietà che "navigano" verso altre entità, come Planet.Moons
) sono contrassegnate come Added
, a meno che non siano già associate al contesto .