我正在使用实体框架6.1代码优先的三层架构
UI图层中的代码
dataGridView1.DataSource = _userBLL.GetUsers();
业务逻辑层中的代码
public object GetUsers()
{
return _userDAL.GetUsers();
}
数据访问层中的代码
public object GetUsers()
{
return db.Users.Select(u => u);
}
我可以检索数据,但在将DataSource
分配给DataGridView
时抛出以下错误:
不支持直接与商店查询(DbSet,DbQuery,DbSqlQuery,DbRawSqlQuery)绑定数据。而是使用数据填充DbSet,例如通过在DbSet上调用Load,然后绑定到本地数据。对于WPF绑定到DbSet.Local。对于WinForms绑定到DbSet.Local.ToBindingList()。对于ASP.NET WebForms,您可以绑定到查询上调用ToList()的结果或使用模型绑定,有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=389592。
任何人都可以帮我解决这个错误吗?如何将检索到的数据源分配给DataGridView
以及ListView
?
答案 0 :(得分:1)
调用ToList()
方法。像这样:
public object GetUsers()
{
return db.Users.ToList();
}
此外,您可以像这样使用AsQueryable()
:(返回IQueryable<T>
将推迟执行查询,直到实际使用结果。)
public IQueryable<User> GetUsers()
{
return db.Users.AsQueryable();
}
阅读这篇文章可能有用:Why use AsQueryable() instead of List()
答案 1 :(得分:0)
你需要这样做
public IEnumerable<User> GetUsers()
{
return db.Users.Select(u => u).ToList();
}
应用ToList并在代码中更改您的返回类型....您的代码有问题,因为您直接将查询绑定到您的数据网格...这个问题导致因为linq查询被执行得失败...这意味着你需要通过使用ToList,Count等来获得查询结果。