Почему этот объект сущности, на который ссылаются, является нулевым? - PullRequest
1 голос
/ 07 января 2010

У меня строго типизированное представление, которое получает модель Design для своего рендеринга. Класс «Мой дизайн» (сущность) имеет отношение «один к одному» с конструктором (т. Е. 1 конструктор может иметь 1 или более дизайнов).

При попытке использовать следующий код я получаю исключение NullReferenceException для отношения Design.Designer. Очевидно, что я делаю что-то не так, но, будучи довольно неопытным в 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>
<%} %>

Любые предложения и указатели приветствуются.

1 Ответ

2 голосов
/ 07 января 2010

Свойство Designer является так называемым свойством навигации , и они не загружаются по умолчанию, поэтому вы получаете исключение NullReferenceException.

У вас есть как минимум два варианта:

Включить в запрос

Когда вы запрашиваете свой ObjectContext, явно определите, что ваш запрос должен включать свойство навигации Designer. Это может выглядеть примерно так:

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 выдаст запрос к базе данных для каждого элемента в цикле, так что это будет намного более чутким решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...