2013-02-20 45 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不支持可展开的行,因此您只能显示平坦的结构。如果您不想重复使用博客名称,则可以考虑使用两个网格的主细布局。