2015-10-24 47 views
0

我正在使用WPF和實體框架6編寫課程選擇程序。在我的數據庫中,我有三個表格,一個用於希望選擇課程的學生,一個用於關於課程信息(名稱課程開始時間等),另一個是關於教師的信息。我在我的程序中列出了所有課程的相關數據,但由於教師存在於不同的表格中,因此我無法在我的ListView中顯示他們的其他字詞。我在加入兩個數據時遇到問題表,並顯示在一個單一的ListView:顯示來自兩個表格的信息表

here is an image from my database schema in entity framework

,這是我爲顯示在ListView迄今我無法顯示教師的課程的代碼數據由於上面的問題解釋

 private void button_Click(object sender, RoutedEventArgs e) 
    { 
     using (var context = new Model1Container()) 
     { 

      var course_List = new List<course>(); 
      foreach (var course in context.courses) 
      { 
       course_List.Add(course); 
      } 
      listView.ItemsSource = course_List; 
     } 
    } 
+0

你試過什麼樣的xaml?導航屬性在那裏,你只需要用點符號來獲得教師數據。調試並檢查'course_list',老師是否也進來? – Crowcoder

回答

0

您擁有之間的一對多關係和Instructor,因此,您需要輸入Course實體navigation property,您可以使用instructor來顯示相關教師。現在

我的第一個建議是,你並不需要在所有的課程重複,以創建一個列表,你可以這樣做:

using (var context = new Model1Container()) 
    { 
     var course_List = context.courses.Include(c=>c.instructor).ToList(); 
     listView.ItemsSource = course_List; 
    } 

Include擴展方法可以讓你在查詢相關對象包括:您希望包含在查詢結果中。

現在,要查看Course信息和相關Instructor您可以定義一個自定義ItemTemplate。正如我之前所說,instructor是一個Course屬性,所以,你可以做這樣的事情。

<ListView.ItemTemplate> 
     <DataTemplate> 
      <WrapPanel> 
      ... 
      <TextBlock Text="Instructor: " /> 
      <TextBlock Text="{Binding instructor.name}" FontWeight="Bold" /> 
      </WrapPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
+0

@SaeidGhafouri,如果您不包含'instructor'導航屬性作爲查詢的一部分,當您嘗試檢查導師導航時,EF將引發異常。您的上下文實例死後,您列表中任何課程中的屬性。因此,爲了避免這種情況,您需要在查詢中包含每門課程隨相關教師提供的內容。 – octavioccl

+0

究竟應該在哪裏寫第一個(我的意思是代碼而不是xaml)語句?在我自己的代碼之後或之前的答案中,如果是這樣(在以前的答案中)究竟在哪裏? –

0

我認爲這是btter有InsctruorId在課程表,並使用下面的代碼加盟脊髓癆

 private void button_Click(object sender, RoutedEventArgs e) 
     { 
      using (var context = new Model1Container()) 
      { 

       var course_List = new List<course>(); 
       foreach (var course in GetAllCources) 
       { 
        course_List.Add(course); 
       } 
       listView.ItemsSource = course_List; 
      } 
     } 

     private List<course> GetAllCources() 
     { 
      return (from c in context.cources 
      join i in context.instructors on c.instructorId equals c.Id 
      select new 
      { 
       Cources = c, 
       Instructors = i, 
      }).AsEnumerable().Select(c => new Cources 
      { 
       . 
       . 
       All required fields 
       . 
       . 
       . 
      } : null).AsQueryable(); 
     } 

您可以使用包括如果不想選擇屬性。

+0

我應該在哪裏準確定義GetAllCourse?因爲按照您在此處編寫的方式進行操作,我會在上下文中發現錯誤,這是因爲它沒有被定義,以及「所有必填字段」是什麼意思?如果我的問題看起來很愚蠢,我也很抱歉,這件事很抱歉! –