Проблема с реляционной базой данных в MVC Linq to Entities - PullRequest
1 голос
/ 14 августа 2010

Я надеялся, что кто-нибудь скажет мне, что здесь не так. У меня есть три таблицы, LU_LOC_Suburb, листинги, ListingMessages.


В списках есть следующие столбцы

ID

SuburbID (из LU_LOC_Suburb)

подробнее ...


ListingMessages имеет следующие столбцы

ID

ListingID (из списков)

подробнее ...


Я пытаюсь создать страницу сообщений, где я сначала получаю все сообщения для пользователя;

IQueryable<ListingMessage> Messages = from x in DBEntities.ListingMessageSet.Include("Listings")
                                      where x.Listings.Users.ID == UserID
                                      select x;

Затем я отправляю это в представление, давайте назовем его Сообщения для пользователя.

Я также ограничиваю сообщения списком, принимая все сообщения для пользователя, а затем выбирая только те, которые относятся к определенному списку;

Messages = from x in Messages
           where x.Listings.ID == ListingID
           select x;

Затем я отправляю это в View, давайте назовем его Messages for Listing.

В моих страницах просмотра я хочу записать название пригорода на экран, с помощью которого я могу;

<%= Html.Encode(item.Listings.LU_LOC_Suburb.Name) %>

Теперь вот проблема ...

Это выдает ошибку - ссылка на объект не установлена ​​на экземпляр объекта - когда я НЕ ограничиваю сообщения списком (в Сообщения для пользователя Просмотр). Я не получаю эту ошибку, когда я ограничиваю сообщения перечислением.

Я не понимаю, почему это происходит. Я знаю, что это что-то простое, и надеюсь, что вы, ребята, можете помочь мне решить эту проблему?

Заранее спасибо,

Sheefy

Ответы [ 3 ]

0 голосов
/ 16 августа 2010

Как вы можете знать или не знать, IQueryable является «ленивым» представлением фактического запроса.Он не выполняется, пока не будет перечислен.Из вашего примера кода кажется, что вы отправляете IQueryable прямо на ваш взгляд.Не уверен, что это «неправильно», но я всегда проверяю, действительно ли запрос выполняется в контроллере.Вы можете сделать это, добавив ToList () в оператор, при добавлении его в вашу ViewModel (или ViewData).

Я не говорю, что это решит вашу проблему, но сделает отладку намного проще.

0 голосов
/ 25 августа 2010

Просто если кто-нибудь спотыкается за этот пост и задается вопросом, как преодолеть проблему, я нашел решение здесь .

Используя .Include ("RelatedTable.ParentTable") IЯ смог обойти проблему, хотя я до сих пор не понимаю, почему она не отображает связанные таблицы, когда я не сужаю ее с помощью ListingID.

0 голосов
/ 14 августа 2010

Может быть, вы не "включили" "списки" в запрос сообщения?

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