【发布时间】:2016-06-13 15:14:19
【问题描述】:
我在一个小问题上需要一些绝望的帮助,我相信对于那些在实体框架方面有多年经验的经验丰富的程序员来说这很容易。这是我第一次接触EF。我有一组组合框需要在 Form_Load 事件中填充。为了重构和避免代码冗余,我创建了一个函数,所有组合都调用它传递必要的参数来填充它,如下所示:
private void FormEntities_Load(object sender, EventArgs e)
{
//string query = "Select Id, Name from Table_Name";
FillCombo(cboCountry, "Select Id, Name from Country", "Name", "Id");
FillCombo(cboCategory, "Select Id, Name from Category", "Name", "Id");
}
public void FillCombo(ComboBox combo, string query, string displayMember, string valueMember)
{
sqlCmd = new SqlCommand(query, sqlConStr);
sqlDa = new SqlDataAdapter(sqlCmd);
dt = new DataTable();
sqlDa.Fill(dt);
combo.DataSource = dt;
combo.DisplayMember = displayMember;
combo.ValueMember = valueMember;
combo.Selected.Index = -1;
}
由于我现在使用的是 EF,我打算使用相同的函数来填充组合框,但这次使用 EF 实体作为我的数据源,如下所示。问题是,我不知道应该为函数中的第二个参数定义哪个类/类型来访问 DBSet 集合。我已经尝试了下面的代码,但它不起作用。当我调用该函数时,编译器会抛出一个错误,说我传递了一些无效的参数。我在这里做错了什么?
private void FormEntities_Load(object sender, EventArgs e)
{
SystemDBContext ctxt = new SystemDBContext ();
FillCombo(cboCountry, ctxt.CountryEntity, "Name", "Id");
FillCombo(cboCategory, ctxt.CategoryEntity, "Name", "Id");
}
public void FillCombo(MetroFramework.Controls.MetroComboBox combo, DbSet datasource, string displayMember, string valueMember)
{
combo.DataSource = datasource.ToList();
combo.DisplayMember = displayMember;
combo.ValueMember = valueMember;
combo.SelectedIndex = -1;
}
提前致谢!
【问题讨论】:
-
您面临的确切异常是什么?
-
错误是编译时错误:
'System.Data.Entity.DbSet' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'System.Data.Entity.DbSet' could be found (are you missing a using directive or an assembly reference?) -
没错,就是错误!谢谢。
标签: c# sql winforms entity-framework combobox