Entity Framework
엔티티 상태 관리
수색…
비고
Entity Framework의 엔터티에는 System.Data.Entity.EntityState 열거 형 목록에 나열된 다양한 상태가있을 수 있습니다. 이러한 상태는 다음과 같습니다.
Added
Deleted
Detached
Modified
Unchanged
Entity Framework는 POCO와 함께 작동합니다. 즉, 엔티티는 속성이없는 간단한 클래스이며 자체 상태를 관리하는 메서드입니다. 엔티티 상태는 ObjectStateManager
에서 컨텍스트 자체로 관리됩니다.
이 항목에서는 엔티티 상태를 설정하는 다양한 방법에 대해 설명합니다.
상태 설정 단일 엔티티 추가
EntityState.Added
는 완전히 동일한 두 가지 방법으로 설정할 수 있습니다.
컨텍스트에서 해당 항목의 상태를 설정하면 다음을 수행 할 수 있습니다.
context.Entry(entity).State = EntityState.Added;
컨텍스트의
DbSet
에 추가하면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
로 Added
한다는 것입니다.
엔티티의 상태를 Added
설정하면 탐색 속성 ( Planet.Moons
과 같은 다른 엔티티를 "탐색"하는 속성)의 모든 엔티티 는 컨텍스트에 이미 첨부되어 있지 않으면 Added
표시됩니다.