Szukaj…


Uwagi

Podmioty w Entity Framework mogą mieć różne stany wymienione przez wyliczenie System.Data.Entity.EntityState . Te stany to:

Added    
Deleted    
Detached    
Modified    
Unchanged

Entity Framework współpracuje z POCO. Oznacza to, że jednostki są prostymi klasami, które nie mają właściwości ani metod zarządzania własnym stanem. Stanem jednostki zarządza sam kontekst, w ObjectStateManager .

Ten temat obejmuje różne sposoby ustawiania stanu encji.

Ustawienie stanu Dodano jednej jednostki

EntityState.Added można ustawić na dwa całkowicie równoważne sposoby:

  1. Ustawiając stan jego wpisu w kontekście:

     context.Entry(entity).State = EntityState.Added;
    
  2. Dodając go do DbSet kontekstu:

     context.Entities.Add(entity);
    

Podczas wywoływania SaveChanges jednostka zostanie wstawiona do bazy danych. Kiedy SaveChanges kolumnę tożsamości (automatycznie ustawiany, automatycznie zwiększający klucz podstawowy), to po SaveChanges właściwość klucza podstawowego encji będzie zawierała nowo wygenerowaną wartość, nawet jeśli ta właściwość miała już wartość .

Stan ustawienia Dodano wykres obiektowy

Ustawienie stanu wykresu obiektowego (zbioru powiązanych elementów) na Added różni się od ustawienia pojedynczego elementu jako Added (patrz ten przykład ).

W tym przykładzie przechowujemy planety i ich księżyce:

Model klasy

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

Kontekst

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

Używamy instancji tego kontekstu, aby dodać planety i ich księżyce:

Przykład

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

Wynik:

Added
Added

Widzimy tutaj, że dodanie Planet ustawia także stan Księżyca na Added .

Podczas ustawiania stanu encji na Added wszystkie encje we właściwościach nawigacji (właściwości, które „nawigują” do innych encji, takich jak Planet.Moons ) są również oznaczane jako Added , chyba że są już dołączone do kontekstu .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow