Recherche…


Remarques

Les entités dans Entity Framework peuvent avoir différents états répertoriés par l'énumération System.Data.Entity.EntityState . Ces états sont:

Added    
Deleted    
Detached    
Modified    
Unchanged

Entity Framework fonctionne avec les POCO. Cela signifie que les entités sont des classes simples qui n'ont pas de propriétés et méthodes pour gérer leur propre état. L'état de l'entité est géré par un contexte lui-même, dans ObjectStateManager .

Cette rubrique couvre différentes manières de définir l'état d'une entité.

Définition de l'état Ajout d'une entité unique

EntityState.Added peut être configuré de deux manières totalement équivalentes:

  1. En définissant l'état de son entrée dans le contexte:

     context.Entry(entity).State = EntityState.Added;
    
  2. En l'ajoutant à un DbSet du contexte:

     context.Entities.Add(entity);
    

Lors de l'appel de SaveChanges , l'entité sera insérée dans la base de données. Lorsqu'elle a une colonne d'identité (une clé primaire à auto-incrémentation automatique), puis après SaveChanges , la propriété de clé primaire de l'entité contiendra la nouvelle valeur générée, même si cette propriété avait déjà une valeur .

Définition de l'état Ajout d'un graphique d'objet

Définir l’état d’un graphe d’objets (une collection d’entités liées) à Added est différent de définir une seule entité comme étant Added (voir cet exemple ).

Dans l'exemple, nous stockons des planètes et leurs lunes:

Modèle de 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; }
}

Le contexte

public class PlanetDb : DbContext
{
    public property DbSet<Planet> Planets { get; set; }
}

Nous utilisons une instance de ce contexte pour ajouter des planètes et leurs lunes:

Exemple

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);

Sortie:

Added
Added

Ce que nous voyons ici, c'est que l'ajout d'une Planet définit également l'état d'une lune à Added .

Lors de la définition de l'état d'une entité à Added , toutes les entités de ses propriétés de navigation (propriétés qui «naviguent» vers d'autres entités, telles que Planet.Moons ) sont également marquées comme Added , sauf si elles sont déjà associées au contexte .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow