如何使用实体框架在一个dataGridView中合并多个表?

时间:2019-06-05 15:40:40

标签: c# winforms entity-framework

我有一个Windows Forms应用程序,想从单个dataGridView区域中数据库的多个表中获取信息。

我正尝试在没有SqlConnectionSqlDataAdapter的情况下进行操作,因此将通过Entity Framework进行连接

DBContext db = new DBContext

是否可以这样做?

我有三个表:

用户:

UserID,
Name

系统:

SysID,
SysType

活动:

ActivID,
UserID (FK)
SysID (FK)
Date,
Version,
Changes

我的代码:

using DBContext db = new DBCntext())
{
    dataGridView.DataSource = db.Table.ToList<Table>();
}

因此,我只在一个表的情况下编写,但是如果没有正确地在数据库中进行连接,是否可以串联两个或多个表?

最后,我想在一个dataGridView中获取User + System + Activities表。

1 个答案:

答案 0 :(得分:1)

如果您的班级是这样正确定义的:

public class Activity
{
    public int ActivityID { get; set; }
    public string Version{ get; set; }
    public DateTime Date { get; set; }
    public string Changes { get; set; }

    public int UserID { get; set; }
    public User User { get; set; }  // navigation property for User
    public int SystemID { get; set; }
    public System System { get; set; }  // navigation property for System
}

现在,您可以编写如下查询:

using DBContext db = new DBCntext())
{
    dataGridView.DataSource = db.Activitys
        .Include(a => a.User)
        .Include(a => a.System)
        .Select(a => new MyModel {
            MyModel.ActivityID = a.ActivityID,
            MyModel.Version= a.Version,
            MyModel.Date = a.Date ,
            MyModel.Changes = a.Changes,
            MyModel.UserName = a.User.Name,
            MyModel.SysType= a.System.SysType
        })
        .ToList();
}

如果您尚未定义导航属性,则可以使用LINQ Join