Привязка данных непосредственно к запросу хранилища (DbSet, DbQuery, DbSqlQuery) не поддерживается Entity Framework 5

у меня есть 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().

но в контексте.парни.Местных не было!--7--> метод.

Я не думаю, что это проблема devexpress, но скорее я не получаю, как правильно установить источник данных. Есть ли способ получить context.chaps.Local.ToBindingList() аналог?

2 ответов


context.chaps.Local это ObservableCollection<T>. Но!--4--> не является методом ObservableCollection<T> но метод расширения в DbExtensions:

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

чтобы использовать этот метод и увидеть его с помощью Intellisense, вам нужно включить соответствующее пространство имен в файл кода, где вы пытаетесь вызвать ToBindingList():

using System.Data.Entity;

перед привязкой источника данных к списку привязки убедитесь, что вы загрузили все строки.

context.chaps.load 'загрузить данные gridcontrol1.datasource = context.chaps.Local.ToBindingList() ' это загрузит записи в сетку. также дайте вам новую строку, чтобы добавить новую, или вам также разрешено обновлять сетку.