DbSet<T>.Create()
을 사용하는 시나리오는 기존 엔티티를 컨텍스트에 연결 한 다음 관련 엔티티의 지연로드를 활용하는 것입니다. 예 :
이
public class Parent
{
public int Id { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public string Name { get; set; }
}
다음은 다음 일 것입니다 : 아이들의
using (var context = new MyDbContext())
{
var parent = context.Parents.Create();
parent.Id = 1; // assuming it exists in the DB
context.Parents.Attach(parent);
foreach (var child in parent.Children)
{
var name = child.Name;
// ...
}
}
여기에 게으른 로딩 (null
을 아마도 하늘의 콜렉션을 결과로 아니지만) 트리거됩니다. context.Parents.Create()
을 new Parent()
으로 바꾸면 parent.Children
이 항상 null
이므로 foreach 루프가 중단됩니다.
편집 또 다른 예는 여기에 있었다
(새로운 엔티티의 외래 키 속성을 채우고 다음 새 개체가 DB에 삽입 한 후 유유히로드 탐색 속성 받고) : Lazy loading properties after an insert
아를. . 나는 당신이 외래 키 ID를 채울 수 있고 모든 게으름없이 게으른로드를 할 수 있다는 것을 몰랐다. 기존 레코드를로드하지 않고 자식 만 원할 경우 유용 할 수 있습니다. –
"context.Parents"가 null 인 경우 어떻게해야합니까? 귀하의 케이스를 시도하고 있지만 실행 가능하지만 불행히도 나를 위해 "context.Parents"가 null이므로 여기에서 예외가 발생합니다. 'System.NullReferenceException '이 (가) YourProject.dll에서 발생했지만 사용자 코드에서 처리되지 않았습니다. 추가 정보 : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. 만약 해결책이 있으시면 알려주십시오. 그래서 나는 다음 노트에서 그것을 극복하고 내 노트에 쓸 것입니다. –