2013-02-20 40 views
1

我認爲這將是直截了當的事情,但這是一整天,我仍然無法找到答案。我們來看一個非常簡單的例子。我們有一個類Post使用Code First和外鍵獲取數據

public class Post 
{ 
    public string Content { get; set; } 

    public int BlogId { get; set; } 
    public virtual Blog Blog { get; set; } 
} 

而且還Blog類:

public class Blog 
{ 
    public string Name { get; set; } 

    public virtual List<Post> Posts { get; set; } 
} 

現在,當我使用Blog數據我(尤其是在的dataGridView),我就可以通過設置訪問每個屬性的值dataGridView中的屬性名稱。唯一無法直接訪問的數據是我通過郵件中的外鍵獲取的數據。

我怎樣才能得到我的數據庫中的每一行Post.Content?因爲現在我只能在我的dataGridView中設置Post,它返回類似System.Data.Entity.DynamicProxy...

+0

1)您正在使用哪種UI框架(即Web窗體,MVC等)? 2)不應該博客有一個帖子的集合? – IronMan84 2013-02-20 19:38:42

+0

我正在使用'Windows Forms' - 'MDI'。至於代碼我使用這裏的例子 - http://msdn.microsoft.com/en-us/data/jj193542.aspx – Leron 2013-02-20 19:44:01

+0

你已經複製了錯誤的代碼。 – IronMan84 2013-02-20 19:49:04

回答

1

您可以創建一個DTO類型這樣

public class PostDto 
{ 
    public string Blog { get; set; } 
    public string Content { get; set; } 
} 

通過

var dtos = from b in db.Blogs 
      from p in b.Posts 
      select new PostDto { 
           Blog = b.Name, 
           Content = p.Content 
           }; 

填充它,然後結合dtos.ToList()到DGV。 DGV不支持可展開的行,因此您只能顯示平坦的結構。如果您不想重複使用博客名稱,則可以考慮使用兩個網格的主細布局。