WinForms&实体框架:在WinForms父数据网格视图中显示子实体数据

时间:2010-11-25 11:55:17

标签: c# entity-framework datagridview entity-framework-4

假设我有这两个表:

分类

Id int primary key,
Name nvarchar(50) not null,
Description ntext null,
AnotherColumn nvarchar(20) not null,
AndYetAnotherColumn nchar(10) null

产品

Id int primary key,
CategoryId int not null (references Category.Id),
Name nvarchar(20) not null
OtherStuff...

我有一个Product实体,其导航EntityReference类型为Category,即一个产品只属于一个类别,但一个类别可能包含多个产品。

假设我想在网格中显示产品,但我还希望在产品数据网格中显示Category.NameCategory.AndYetAnotherColumn以及产品信息。

如果我只是将DataGridView控件绑定到Products实体对象,它会显示一个名为Category的列,该列绑定到Category导航属性,以及此列的每一行显示System.Type类的Category,恰好是MyProjectNamespace.Category

如果不创建和绑定另一个ViewModel或Repository,或者某些自定义类返回我需要的混合数据,如何将这些东西显示到数据网格中?这是一个项目要求,我不创建ViewModel或中间类。

2 个答案:

答案 0 :(得分:2)

使用以下代码:

Entities db = new Entities();
var q = from it in db.Products
        select new
        {
          it.Id,
          it.Name,
          it.OtherStuff,
          it.Category.Name,
          it.Category. AndYetAnotherColumn
        };
dataGridViewInstance.DataSource = q.ToList();

答案 1 :(得分:0)

另一个解决方案是在数据库中创建一个View,并使用EntityFramework作为新实体进行映射