Entity Framework - Проблема, возвращающая Entity Entity - PullRequest
0 голосов
/ 16 ноября 2010

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

Вот что я пытаюсь сделать:

У меня есть две таблицы: HeaderTable и DetailTable. В DetailTable будет от 1 до Много записей для каждой строки в HeaderTable. В моем EDM я установил Отношения между этими двумя таблицами, чтобы отразить это.

Поскольку теперь между этими таблицами существует настройка взаимосвязи, я подумал, что, запросив все записи в HeaderTable, я смогу получить доступ к коллекции DetailTable, созданной EDM (я могу видеть свойство при запросе, но оно пустое ).

Вот мой запрос (это приложение Silverlight, поэтому я использую DomainContext на клиенте):

 // myContext is instatiated with class scope
  EntityQuery<Project> query = _myContext.GetHeadersQuery();


  _myContext.Load<Project>(query);   

Поскольку эти вызовы асинхронные, я проверяю значения после завершения обратного вызова. При проверке значения _myContext.HeaderTable у меня ожидаются все строки. Однако свойство DetailsTable в _myContext.HeaderTable пусто.

foreach (var h in _myContext.HeaderTable)  // Has records
    {
      foreach (var d in h.DetailTable)  // No records
      {
        string test = d.Description;
      }

Я предполагаю, что мой запрос на возврат всех объектов HeaderTable необходимо изменить, чтобы каким-то образом вернуть все сборы HeaderDetail для каждой строки HeaderTable. Я просто не понимаю, как работает этот нелогичный метод моделирования.

Что я делаю не так? Любая помощь очень ценится. Если вам нужна дополнительная информация, просто дайте мне знать. Я буду рад предоставить вам все, что вам нужно.

Спасибо

-Скотт

1 Ответ

1 голос
/ 16 ноября 2010

Вероятно, вам не хватает Include(), что, я думаю, выходит за рамки предоставленного вами кода.

Проверьте это классное видео;он объяснил мне все об EDM и Linq-to-Entities:
http://msdn.microsoft.com/en-us/data/ff628210.aspx

Если вы не можете сейчас просматривать видео, посмотрите этот фрагмент кода, который я создал на основевидео (извините, это не в Silverlight, но я надеюсь, что это та же самая основная идея).

Поиск:

public List<Story> GetAllStories()
{
    return context.Stories.Include("User").Include("StoryComments").Where(s => s.HostID == CurrentHost.ID).ToList();
}

Загрузка данных:

private void LoadAllStories()
{
    lvwStories.DataSource = TEContext.GetAllStories();
    lvwStories.DataBind();
}

Использование данных:

protected void lvwStories_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        Story story = e.Item.DataItem as Story;

        //  blah blah blah....

        hlStory.Text = story.Title;
        hlStory.NavigateUrl = "StoryView.aspx?id=" + story.ID;
        lblStoryCommentCount.Text = "(" + story.StoryComments.Count.ToString() + " comment" + (story.StoryComments.Count > 1 ? "s" : "") + ")";
        lblStoryBody.Text = story.Body;
        lblStoryUser.Text = story.User.Username;
        lblStoryDTS.Text = story.AddedDTS.ToShortTimeString();
    }            
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...