Entity Framework
Estado de la entidad gestora
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:
Al establecer el estado de su entrada en el contexto:
context.Entry(entity).State = EntityState.Added;
DbSet
a unDbSet
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 .