>백엔드 개발 >C++ >EF Core 탐색 속성이 명시적으로 로드될 때까지 null인 이유는 무엇이며 이를 일관되게 채울 수 있는 방법은 무엇입니까?

EF Core 탐색 속성이 명시적으로 로드될 때까지 null인 이유는 무엇이며 이를 일관되게 채울 수 있는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-24 22:25:09730검색

ef Core는 빈 값 문제와 내비게이션 속성의 솔루션을 지연 시켰습니다. 문제 설명 Why are EF Core navigation properties null until explicitly loaded, and how can I consistently populate them?

다음 모델을 고려하십시오

dbcontext의

메소드에서 관계를 정의합니다.

돌연변이 체를 쿼리 할 때, 속성은 원래 비어있었습니다. 그러나 돌연변이 체를 쿼리하기 전에 를 확인하면 속성이 채워집니다. 원인의 분석

EF 핵심 문서의 "로드 관련 데이터"는이 동작을 설명했습니다.

엔티티 프레임 워크 코어는 지연로드를 지원하지 않으므로 일반적으로 탐색 속성이 사전로드되거나 명시 적으로로드를 통해로드하기 전에 비어 있습니다.

<code class="language-csharp">public class Mutant
{
    public long Id { get; set; }
    public long OriginalCodeId { get; set; }
    public virtual OriginalCode OriginalCode { get; set; }
}

public class OriginalCode
{
    public long Id { get; set; }
    public virtual List<Mutant> Mutants { get; set; }
}</code>
그러나"프리로드 "부분에는 다음이 포함되어 있습니다.

OnModelCreating 엔티티 프레임 워크 코어는 컨텍스트 인스턴스의 다른 엔티티에로드 된 내비게이션 속성을 자동으로 복구합니다. 따라서 내비게이션 속성을 포함하는 데이터를 명시하지 않더라도 일부 또는 모든 관련 엔티티가 이전에로드 된 경우 속성이 여전히 채워질 수 있습니다.

<code class="language-csharp">modelBuilder.Entity<Mutant>()
    .HasOne(m => m.OriginalCode)
    .WithMany(oc => oc.Mutants)
    .HasForeignKey(m => m.OriginalCodeId)
    .OnDelete(DeleteBehavior.Restrict);</code>
솔루션

OriginalCode 첫 번째 문제 해결 (내비게이션 속성이 비어 있음) : OriginalCode 프리 로딩과 같은 사용 가능한로드 관련 데이터를 사용하는 방법 : OriginalCode 두 번째 문제를 해결합니다 (관련 엔터티가 내비게이션 속성을 채우게 한 관련 엔티티가 사전로드 됨) :

이 동작은"설계된 "상태이며 제어 할 수 없습니다. 이것을 피하기 위해 :

각 쿼리에 새 DBContext 인스턴스를 사용하십시오. 추적 쿼리없이 사용하십시오 ().

ef Core v2.1 및 더 높은 버전 업데이트 :

Core v2.1 지원 지연 로딩을 지원하지만 기본적으로 활성화되지는 않습니다. 그것을 가능하게하려면 :

모든 내비게이션 속성을 로 표시하십시오.
> nuget 백을 설치하십시오.

사용

지연 하중 활성화.

위의 방법을 통해 EF Core의 탐색 속성을 효과적으로 관리하여로드하고 공석 문제를 피하며 코드의 예측 가능성을 향상시킬 수 있습니다.

위 내용은 EF Core 탐색 속성이 명시적으로 로드될 때까지 null인 이유는 무엇이며 이를 일관되게 채울 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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