Попытка прохождения таблиц из базы данных sql с использованием структуры сущностей для веб-сайтов .net 3.5 - PullRequest
0 голосов
/ 14 января 2011

Я просто пытаюсь получить данные из двух таблиц базы данных sql server с помощью структуры сущностей ado.net.Мой код:

    using (Model.Entities e = new Model.Entities())
    { 
       return e.PAGE.First().CONTROL;
    }

База данных настроена на две таблицы, управляющую таблицу, которая связывается с таблицей страниц через поле 'id' в таблицах (control_id).Для каждого объекта PAGE существует один объект CONTROL.

Я продолжаю получать нулевое значение для моего возвращаемого значения, и я знаю, что это неправильно.

Я могу использовать vis studio и точки останова, чтобы увидеть, что в 'e' есть объект PAGE, и я вижу, что в 'e' есть несколько объектов CONTROL.Это не большая база данных, у меня просто есть несколько примеров данных, чтобы убедиться, что я работаю - так что я знаю, что должен быть объект CONTROL, связанный с этой страницей (я проверил это через сервер sql).

Я хорошо знаком с общим синтаксисом кода, я использую LINQ в течение нескольких лет;тем не менее, я совсем не проделал большую работу с платформой сущностей или ado.net 4.

Похоже, что если я просто извлекаю данные отдельной таблицы, то она работает нормально (т.е. ePAGE.First () .. или.. e.CONTROL.Where (x => x.someValue.Equals ('someValue'))), но если я попытаюсь пройтись по таблицам, я ничего не получу назад (NULL).

Надеюсь, что всеимеет смысл.

1 Ответ

1 голос
/ 14 января 2011

Некоторые вопросы к вам:

  • Я полагаю, что это 1..1 между PAGE и CONTROL,
  • Есть ли FK с именем ControlID на PAGE?
  • Есть ли у вас навигационное свойство "Управление" на вашей сущности "Страница" в вашем EDMX?

Если ответом на все вышесказанное является Да , тоэто должно работать:

var page = e.Pages.Include("Control").First();

Здесь вы возвращаете первую запись «Страницы» и нетерпеливо загружаете связанный элемент управления.

Произведенный SQL должен быть чем-токак это:

SELECT p.*, c.*
FROM Page p
INNER JOIN Control c
on p.ControlId = c.ControlId
...