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:

  1. Impostando lo stato della sua voce nel contesto:

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



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow