实体框架,获取任何EntityType对象的表数据,因为DataGrid可以显示其列和数据

时间:2015-10-08 00:35:39

标签: c# wpf entity-framework

我的WPF程序中有这样的方法:

void ShowTableInDataGrid(EntityType myEntityType)
{
    var tableName = myEntityType.Name;
    var result = _context.Database.
                 SqlQuery<dynamic>("SELECT * FROM dbo." + tableName).ToList();

    DataGridMain.ItemsSource = result;
}

它通过TableNameEntityFramework上加载数据库中的数据,但不会在DataGridMain控件中显示任何数据。 DataGridMain根据指定为ItemsSource列表的实体类信息自动创建列。

现在例如如果我将dynamic更改为Customer

SqlQuery<Customer>("SELECT * FROM dbo." + tableName).ToList();

TableNameCustomer,然后DataGridMain非常好地显示列和数据

但我有超过100个不同的表,我不知道在设计时将哪个表信息传递给ShowTableInDataGrid方法然后我应该写超过100个案例(EF中每个表的一个案例)像这样处理这个问题:

void ShowTableInDataGrid(EntityType myEntityType)
{
    var tableName = myEntityType.Name;

    //....

    switch (selectedEntity.Name)
    {
        case "Customer":
        {
            result = _db.Database.SqlQuery<Customer>("SELECT * FROM dbo." + selectedEntity.Name).ToList();
                break;
        }

        case "Book":
        {
            result = _db.Database.SqlQuery<Book>("SELECT * FROM dbo." + selectedEntity.Name).ToList();
                break;
        }
        .
        .
        .
        . // OVER 100 CASE !!!
        .
        .
        .
        default:
        {
            MessageBox.Show("New Case Needed!");
            break;
        }
    }

    DataGridMain.ItemsSource = result;
}

我的问题是:

有没有办法防止这种切换案例???我认为这种方式是硬编码而且非常静态。我讨厌这种方式..

此工作的基础:当我从EF中选择一个表时,我希望在Comobox中显示DataGrid个表并在Combobox中显示它。目前我的Combobox效果很好,DataGrid就是问题所在。

1 个答案:

答案 0 :(得分:0)

尝试这一点,它似乎没有抱怨它,但没有完整的设置来测试它。

void ShowTableInDataGrid(System.Data.Entity.Core.Metadata.Edm.EntityType myEntityType) {
        var tableName = myEntityType.GetType();
        var result = _context.Database.
                     SqlQuery<myEntityType.GetType()> ("SELECT * FROM dbo." + tableName).ToList();

        DataGridMain.ItemsSource = result;
    }