Entity Framework
Stan podmiotu zarządzającego
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:
Ustawiając stan jego wpisu w kontekście:
context.Entry(entity).State = EntityState.Added;
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 .