使用Code First和外键获取数据

时间:2013-02-20 19:29:20

标签: c# visual-studio-2010 entity-framework ado.net

我认为这将是直截了当的,但它已经整整一天了,我仍然无法做到这一点。找到答案。让我们来看一个非常简单的例子。我们有一个班级Post

   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...的内容。

1 个答案:

答案 0 :(得分: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不支持可扩展行,因此您只能显示平面结构。如果您不想要重复的博客名称,可以考虑使用两个网格的主 - 细节布局。