EF 핵심 탐색 속성 초기화 : 모범 사례
EF Core에는 내비게이션 속성을 초기화하는 두 가지 방법이 있습니다.
메소드 1 : 초기화하지 마십시오
이 메소드는 POCO (일반 Old CLR 객체)에서 내비게이션 속성을 초기화하지 않습니다.
방법 2 : 생성자에서 초기화
이 메소드는 POCO의 생성자에서 내비게이션 속성을 초기화합니다.
질문 1 : 어떤 방법이 더 낫습니까? <..>
수집 속성 (예 : 주소)의 경우 방법 1과 메소드 2에는 기능 1과 메소드 2에는 차이가 없습니다. 초기화는 비즈니스 로직에 영향을 미치지 않습니다.
참조 속성 (예 : 라이센스)의 경우 사용하지 않는 것이 좋습니다. 빈 엔티티 또는 부분로드 된 엔티티와 같은 예기치 않은 동작이 데이터베이스에 저장 될 수 있습니다.
질문 2 : 내비게이션 속성의 방향을 결정하는 방법은 무엇입니까? <..>
사용자와 라이센스 사이의 두 가지 관계에서 두 클래스가 서로의 탐색 속성을 초기화하면 스택 오버플로가 발생할 수 있습니다. 이를 피하려면 내비게이션 속성 중 하나를 제거해야합니다 (이 예에서는 하위 엔터티의 속성)를 제거해야합니다. 이 결정은 비즈니스 규칙 및 관련 방향을 기반으로해야합니다.
장점과 단점은 와 비교됩니다.
메소드 1 (초기화가 아님) :
장점 :
빈 엔티티 또는 부분로드 된 의 보존을 방지하는 엔티티
빈 참조 이상을 피하십시오
하중을 지연시키기 쉬운
public class User
{
public int Id { get; set; }
public string UserName { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
public virtual License License { get; set; }
}
로그인 후 복사
<缺 缺> <<> 단점 : <🎜 🎜>
짧은 값의 경우 명시 적으로로드 해야하는 경우
관계 수리를 방지 할 수 없습니다
<二 二> <<> 메소드 II (건설적 함수의 초기화이지만 수집 속성 만) : <🎜 🎜>
<点 点> <<> 장점 : <🎜 🎜>
public class User
{
public User()
{
this.Addresses = new List<Address>();
//this.License = new License(); //对于引用属性,不建议初始化
}
public int Id { get; set; }
public string UserName { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
public virtual License License { get; set; }
}
로그인 후 복사
단순화 된 컬렉션 관리
짧은 참조 이상은 없다
단점 :
로드 된 값을 커버 할 수 있습니다
관계 수리를 방지 할 수 없습니다
ef core 의 포함 및 종자 데이터 문제로 이어질 수 있습니다.
간단히 말해서, 내비게이션 속성 사이에는 큰 차이가 없거나 참조 내비게이션 속성에 대해서는 잠재적 인 문제를 피하기 위해 생성자에서 초기화하지 않는 것이 좋습니다. 선택하는 방법은 특정 비즈니스 요구 및 프로젝트 구조에 따라 다릅니다. 위 내용은 EF Core에서 내비게이션 속성을 초기화하거나 초기화하지 않으려면 : 어떤 접근 방식이 가장 좋습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!