2010-01-07 5 views
1

J'ai une vue fortement typée qui reçoit un modèle de conception pour son rendu. Ma classe de conception (Entité) a une relation plusieurs-à-un avec un concepteur (par exemple, 1 concepteur peut avoir 1 ou plusieurs conceptions).Pourquoi cet objet entité référencé est-il nul?

Lorsque j'essaie d'utiliser le code suivant, j'obtiens une exception NullReferenceException pour la relation Design.Designer. Évidemment, je fais quelque chose de mal, mais étant assez inexpérimenté avec Entity Framework j'ai besoin de conseils sur ce que c'est réellement.

<% 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> 
<%} %> 

Toutes les suggestions et les pointeurs apprécié.

Répondre

2

La propriété Designer est une propriété de navigation , et celles-ci ne sont pas chargées par défaut, ce qui explique pourquoi vous obtenez une exception NullReferenceException.

Vous avez au moins deux options:

inclure dans la requête

Lorsque vous interrogez votre ObjectContext, définissez explicitement que votre requête doit inclure la propriété de navigation Designer. Cela peut sembler un peu comme ceci:

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

charger Explicitement la propriété avant le référençant

Vous pouvez également charger explicitement la propriété de navigation avant son référencement. Cela ressemblerait à ceci:

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

Cependant, cela entraînera EF d'émettre une requête à la base de données pour chaque élément dans la boucle, de sorte que ce serait une solution beaucoup Chartier.

+0

Merveilleux. Je suis allé pour l'option un qui a bien fonctionné. Merci pour ça! –

+1

+1. Une autre option est de projeter sur un modèle de présentation http://blogs.teamb.com/craigstuntz/2009/12/31/38500/ –

Questions connexes