2011-09-23 1 views
6

(을 저장 문맥을 가져올 때)게으른 로딩 할 때 새로운 저장 개체에 작동하지 않는 내가이 클래스를 가지고

public class Comment 
{  
    public long Id { get; set; } 
    public string Body { get; set; } 
    public long OwnerId { get; set; } 
    public virtual Account Owner { get; set; } 
    public DateTime CreationDate { get; set; } 
} 

문제는 가상 부동산 소유자가 할 때 내가 null object reference exception를 얻을 수 있다는 점이다 : 새로운 컨텍스트

comment.Owner.Name 

개체 (DbContext의 동일한 인스턴스에서) 저장 한 후이 권리를 호출 는

를 작동합니다 이 일에 대해 아는 사람 있니?

답변

18

생성자가 Comment이므로 생성되었습니다. 즉, Comment 인스턴스가 프록시되지 않고 지연로드를 사용할 수 없습니다. 당신은 Comment의 프록시 인스턴스를 얻는 대신 DbSetCreate 방법을 사용해야합니다 :

var comment = context.Comments.Create(); 
// fill comment 
context.Comments.Add(comment); 
context.SaveChanges(); 
string name = comment.Owner.Name; // Now it should work because comment instance is proxied 
+0

감사합니다 이것에 대한 매우 간결하고 요점! –

+1

MVC 바인더 (기본 생성자를 사용)를 사용하여이 작업을 수행하지 않는 방법을 찾고있는 사용자는 명시 적으로 다음과 같이 참조 할 수 있습니다. context.Entry (comment) .Reference (x => x . 소유자).로드(); –

+0

m.t.bennett : 매우 유용했습니다. 의견을 보내 주셔서 감사합니다. –

관련 문제