Buscar..


Observaciones

Las entidades en Entity Framework pueden tener varios estados enumerados por la enumeración System.Data.Entity.EntityState . Estos estados son:

Added    
Deleted    
Detached    
Modified    
Unchanged

Entity Framework trabaja con POCOs. Eso significa que las entidades son clases simples que no tienen propiedades ni métodos para administrar su propio estado. El estado de la entidad es administrado por un contexto en sí mismo, en el ObjectStateManager .

Este tema cubre varias formas de establecer el estado de la entidad.

Estado de configuración Agregado de una sola entidad

EntityState.Added se puede configurar de dos maneras totalmente equivalentes:

  1. Al establecer el estado de su entrada en el contexto:

     context.Entry(entity).State = EntityState.Added;
    
  2. DbSet a un DbSet del contexto:

     context.Entities.Add(entity);
    

Al llamar a SaveChanges , la entidad se insertará en la base de datos. Cuando tiene una columna de identidad (una clave principal de auto-establecimiento, auto-incremento), luego, después de SaveChanges , la propiedad de la clave primaria de la entidad contendrá el valor recién generado, incluso cuando esta propiedad ya tuviera un valor .

Estado de configuración Agregado de un gráfico de objeto

Establecer el estado de un gráfico de objeto (una colección de entidades relacionadas) en Added es diferente a establecer una sola entidad como Added (ver este ejemplo ).

En el ejemplo, almacenamos planetas y sus lunas:

Modelo de clase

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

Contexto

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

Usamos una instancia de este contexto para agregar planetas y sus lunas:

Ejemplo

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

Salida:

Added
Added

Lo que vemos aquí es que agregar un Planet también establece el estado de una luna en Added .

Al configurar el estado de una entidad como Added , todas las entidades en sus propiedades de navegación (propiedades que "navegan" hacia otras entidades, como Planet.Moons ) también se marcan como Added , a menos que ya estén adjuntas al contexto .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow