Просто не могу получить Entity Framework, чтобы вытащить то, что я хочу - PullRequest
3 голосов
/ 17 ноября 2010

Хорошо, мне не очень повезло с этим. Я новичок в Entity Framework и со вчерашнего дня борюсь с этой маленькой штукой.

Вот мои таблицы:

  1. Клиенты (id, имя клиента)
  2. Проекты (id, имя проекта, клиент)
  3. Задачи (идентификатор, имя задачи, проект, статус)
  4. TaskStatuses (идентификатор, имя состояния)

В коде я работаю только с одним проектом за раз, и вот как я загружаю этот проект с EF:

thisProject = (from p in dataEntity.projects
                   where p.id == projectID
                   select p).FirstOrDefault();

Потом, когда я загружаю задачи:

thisProject.Tasks.Load();

Затем я установил источник данных DevExpress XtraGrid для загруженных задач:

taskGridControl.DataSource = thisProject.Tasks;

До этого момента все работало как положено, и сетка показывает все задачи для проекта, который я загрузил. Но я также хочу показать поле имени состояния задачи, которое хранится в другой таблице.

Это было очень легко с помощью SQL-соединения, но я не могу этого понять.

Ответы [ 4 ]

3 голосов
/ 17 ноября 2010

Проще всего выделить ваши данные в классе, который сделан специально для этого вида сетки:

from t in dataEntity.tasks
where t.projectId == projectID
select new TaskInfo
{
    ProjectName = t.project.projectname,
    TaskName = t.taskname,
    StatusName = t.taststatus.statusname
}
1 голос
/ 17 ноября 2010

Звучит так, как будто ваша таблица состояния задач еще не загружена.

Думаю, вам больше повезет с EF версии 4 - тогда вам не понадобится строка thisProject.Tasks.Load (), и таблица состояния задачи будет автоматически автоматически загружаться для вас.

0 голосов
/ 17 ноября 2010

Еще несколько идей, чтобы добавить к уже предложенным.

Первый вариант может не применяться, но в случае, если это так ... :) Если во время загрузки проекта вы уже знаете, что хотите получить задачи и статус, вы можете загрузить эти связанные данные вместе с проектом.

thisProject = (из p в dataEntity.projects.Include ("Tasks.TasksStatuses") где p.id == projectID выберите p) .irstOrDefault ();

(я предполагаю названия ваших свойств навигации.)

Еще одна возможность рассмотреть ... вы используете asp.net? Вы можете больше не иметь доступа к контексту, когда пытаетесь лениво загрузить данные о состоянии.

0 голосов
/ 17 ноября 2010
  1. Убедитесь, что загружена другая таблица. Предполагая, что другая таблица называется TaskStatus,

    thisProject.Tasks.TasksStatusReference.Load();
    
  2. В конструкторе в разделе привязок данных просто ссылайтесь на него, как и на любое другое поле, с квалификатором TaskStatus. перед ним: TaskStatus.Status.

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