实体框架5不支持直接与商店查询(DbSet,DbQuery,DbSqlQuery)绑定数据

时间:2013-05-23 18:18:50

标签: devexpress entity-framework-5 datasource

我有一个devexpress GridControl,我正在设置它的数据源如下:

var regs = (from vcap in context.chaps
                             select vcap);

gridControl1.DataSource = new BindingList<chaps>(regs.ToList());

但是当我使用网格时,我添加或删除的行不会被保存,只会保存对初始行的更改。

如果我这样做:

gridControl1.DataSource = context.chaps.Local;

我没有得到任何行,AddNewRow甚至没有在视觉上添加新行。

如果我这样做:

gridControl1.DataSource = context.chaps.ToList();

我获取行并可以保存对它们的更改;行在视觉上被捕获但不在数据库中,并且不能AddNewRow

如果我这样做:

gridControl1.DataSource = context.chaps;

我得到了这个例外:

Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList().

但context.chaps.Local也没有ToBindingList方法。

我不认为这是devexpress的问题,而是我没有得到如何正确设置数据源。有没有办法获得context.chaps.Local.ToBindingList()等价物?

2 个答案:

答案 0 :(得分:7)

context.chaps.LocalObservableCollection<T>。但ToBindingList不是ObservableCollection<T>的方法,而是DbExtensions中的扩展方法:

public static BindingList<T> ToBindingList<T>(
    this ObservableCollection<T> source) where T : class;

为了使用此方法并使用Intellisense查看它,您需要在尝试调用ToBindingList()的代码文件中包含相应的命名空间:

using System.Data.Entity;

答案 1 :(得分:1)

确保在将数据源绑定到绑定列表之前已加载所有行。

context.chaps.load&#39;加载您的数据 gridcontrol1.datasource = context.chaps.Local.ToBindingList()&#39;这将在网格上加载记录。还会为您添加一个新行以添加新行,或者您也可以更新网格。