수색…


비고

Entity Framework의 엔터티에는 System.Data.Entity.EntityState 열거 형 목록에 나열된 다양한 상태가있을 수 있습니다. 이러한 상태는 다음과 같습니다.

Added    
Deleted    
Detached    
Modified    
Unchanged

Entity Framework는 POCO와 함께 작동합니다. 즉, 엔티티는 속성이없는 간단한 클래스이며 자체 상태를 관리하는 메서드입니다. 엔티티 상태는 ObjectStateManager 에서 컨텍스트 자체로 관리됩니다.

이 항목에서는 엔티티 상태를 설정하는 다양한 방법에 대해 설명합니다.

상태 설정 단일 엔티티 추가

EntityState.Added 는 완전히 동일한 두 가지 방법으로 설정할 수 있습니다.

  1. 컨텍스트에서 해당 항목의 상태를 설정하면 다음을 수행 할 수 있습니다.

     context.Entry(entity).State = EntityState.Added;
    
  2. 컨텍스트의 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

우리가 볼 수있는 것은 PlanetAdded 하면 달의 상태를 AddedAdded 한다는 것입니다.

엔티티의 상태를 Added 설정하면 탐색 속성 ( Planet.Moons 과 같은 다른 엔티티를 "탐색"하는 속성)의 모든 엔티티 는 컨텍스트에 이미 첨부되어 있지 않으면 Added 표시됩니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow