Поиск…


замечания

Объекты в Entity Framework могут иметь различные состояния, которые перечислены в перечислении System.Data.Entity.EntityState . Этими состояниями являются:

Added    
Deleted    
Detached    
Modified    
Unchanged

Entity Framework работает с POCOs. Это означает, что объекты - это простые классы, которые не имеют свойств и методов для управления своим собственным состоянием. Состояние ObjectStateManager управляется самим контекстом в ObjectStateManager .

В этом разделе рассматриваются различные способы установки состояния объекта.

Состояние установки Добавлен один объект

EntityState.Added может быть установлен двумя полностью эквивалентными способами:

  1. Установив состояние его записи в контексте:

     context.Entry(entity).State = EntityState.Added;
    
  2. Добавив его в DbSet контекста:

     context.Entities.Add(entity);
    

При вызове SaveChanges объект будет вставлен в базу данных. Когда у него есть столбец идентификатора (автоматически заданный, автоматически увеличивающий первичный ключ), то после SaveChanges свойство первичного ключа объекта будет содержать вновь сгенерированное значение, даже если это свойство уже имеет значение .

Состояние установки Добавлен граф объекта

Установка состояния графа объекта (набора связанных объектов) в Added отличается от установки отдельного объекта как Added (см. Этот пример ).

В этом примере мы храним планеты и их луны:

Модель класса

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

контекст

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

Мы используем экземпляр этого контекста для добавления планет и их спутников:

пример

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

Выход:

Added
Added

Мы видим здесь, что добавление Planet также добавляет состояние луны в Added .

При настройке состояния объекта на Added все объекты в своих свойствах навигации (свойства, которые «перемещаются» по отношению к другим объектам, например Planet.Moons ) также помечены как Added , если они уже не привязаны к контексту .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow