2010-01-07 9 views
1

필자는 렌더링을위한 디자인 모델을받는 강력한 형식의 뷰를 사용합니다. 내 디자인 클래스 (엔티티)는 디자이너와 다 대일 관계를 맺습니다 (즉, 1 명의 디자이너는 1 개 이상의 디자인을 가질 수 있음).이 참조 된 개체가 null 인 이유는 무엇입니까?

다음 코드를 사용하려고하면 Design.Designer 관계에 대해 NullReferenceException이 발생합니다. 분명히 뭔가 잘못하고있는 것은 분명하지만 Entity Framework에 익숙하지 않은 나는 그것이 실제로 무엇인지에 대한 지침이 필요합니다.

<% foreach (var Design in Model) 
    { %> 
<figure> 
    <a href="View/<%= Design.ID %>" rel="Next" title="View this design"> 
     <img id="design-<%= Design.ID %>" 
      src="/Templates/<%= Design.ID %>/preview.png" 
      height="200" 
      width="200" 
      alt="<%= Design.Title %> by <%= Design.Designer.DisplayName %>" 
      title="<%= Design.Title %> by <%= Design.Designer.DisplayName %>" /> 
    </a> 
</figure> 
<%} %> 

모든 제안과 조언을 부탁드립니다.

답변

2

디자이너 속성은 탐색 속성 인이며이 속성은 기본적으로로드되지 않으므로 NullReferenceException이 발생합니다. 당신이 당신의 ObjectContext를 쿼리 할 때

쿼리에 포함

, 명시 적으로 쿼리 디자이너 탐색 속성을 포함한다고 정의 :

당신은 적어도 두 가지 옵션이 있습니다. 이 같은 다소 보일 수 있습니다 :

var q = from d in myObjectContext.Designs.Include("Designer") 
     select d; 

는 명시 적으로

또한 명시 적으로 참조하기 전에 탐색 속성을로드 할 수 있습니다 참조하기 전에 속성을로드합니다. 즉,이과 같습니다

foreach(var design in Model) 
{ 
    design.DesignerReference.Load(); 
    // the rest of the code 
} 

그러나,이 루프의 각 요소에 대한 데이터베이스에 쿼리를 실행하는 EF의 원인이됩니다, 즉 더 많은 (chattier) 솔루션이 될 것입니다 때문에.

+0

놀라운. 잘 작동했던 옵션 하나에 갔다. 고마워! –

+1

+1. 또 다른 옵션은 프리젠 테이션 모델에 프로젝트를 만드는 것입니다. http://blogs.teamb.com/craigstuntz/2009/12/31/38500/ –

관련 문제