>백엔드 개발 >C++ >Entity Framework가 하위 개체를 삽입하지 못하도록 하려면 어떻게 해야 합니까?

Entity Framework가 하위 개체를 삽입하지 못하도록 하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-03 09:13:40491검색

How Can I Prevent Entity Framework from Inserting Child Objects?

Entity Framework 하위 개체 삽입 방지

Entity Framework는 종종 지정된 엔터티와 함께 ​​관련 하위 개체를 저장하려고 시도하여 무결성을 확보할 수 있습니다. 문제. 이 문제를 극복하고 하위 개체 삽입을 방지하기 위해 여러 가지 접근 방식을 사용할 수 있습니다.

Nullable 외래 키 속성

기본적으로 Entity Framework는 외래 키가 Null을 허용하지 않는 것으로 가정합니다. . 하위 개체를 null로 설정하려면 외래 키 속성을 null 허용으로 명시적으로 표시해야 합니다. 이는 모델 클래스에서 필수 속성을 false로 설정하여 달성할 수 있습니다.

예:

public class School
{
  public int Id { get; set; }
  public string Name { get; set; }

  public int? CityId { get; set; }
  public City City { get; set; }
}

public class City
{
  public int Id { get; set; }
  public string Name { get; set; }
}

그러나 외래 키 속성을 null로 설정하면 다음과 같은 결과가 발생할 수 있습니다. 유효성 검사 오류.

엔티티 항목 상태 관리

대체 접근 방식은 Entity Framework 컨텍스트에서 하위 개체의 상태를 수동으로 설정하는 것입니다. 이는 하위 개체가 이미 존재하므로 저장하면 안 된다는 것을 컨텍스트에 알립니다.

예:

public School Insert(School newItem)
{
    using (var context = new DatabaseContext())
    {
        context.Set<School>().Add(newItem);
        context.Entry(newItem.City).State = EntityState.Unchanged;
        context.SaveChanges();
        return newItem;
    }
}

외래 키 접근 방식

더 강력한 방법은 모델 클래스에서 외래 키를 명시적으로 정의하는 것입니다. 특성에 외래 키 열 이름을 지정하면 Entity Framework는 관계를 인식하고 상위 개체만 삽입합니다.

예:

public class School
{
  public int Id { get; set; }
  public string Name { get; set; }

  [ForeignKey("City_Id")]
  public int City_Id { get; set; }
  public City City { get; set; }
}

public class City
{
  public int Id { get; set; }
  public string Name { get; set; }
}

결론

널 입력 가능 외래 키 속성 사용, 엔터티 항목 상태 관리 또는 외래 키 명시적 정의를 통해 다음과 같은 이점을 얻을 수 있습니다. Entity Framework가 자식 개체를 삽입하는 것을 방지하는 방법. 적절한 접근 방식은 특정 요구 사항과 모델 설계에 따라 다릅니다.

위 내용은 Entity Framework가 하위 개체를 삽입하지 못하도록 하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.