Пример явной загрузки Entity Framework

Я пытаюсь эту часть кодов в базе данных "Northwind". Однако я получаю ошибку DataBind

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!Page.IsPostBack)
        {
            GetSpecificCustomer();
        }
    }

    private void GetSpecificCustomer()
    {
        using (var ctx = new northwindContext())
        {
            var query = ctx.Customers.Include("CustomerID").Take(3);

            grdEmployees.DataSource = query;
            grdEmployees.DataBind(); =>NotSupportedException was unhandled by user code(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().)

        }
    }

2 ответа

Решение

Исключение содержит то, что вам нужно сделать:

... Вместо этого заполните DbSet данными...

Так что вам нужно оценить запрос. В исключении упоминается метод Load, но поскольку вам все равно нужно хранить результат локально, самое простое решение - вызвать ToArray() на ваш запрос при назначении его grdEmployees.DataSource,

var query = ctx.Customers.Include("CustomerID").Take(3);
grdEmployees.DataSource = query.ToArray();
grdEmployees.DataBind();

ToArray Метод выполнит запрос, возвращает набор результатов в массиве.

Если вы хотите группы записи.

ты должен использовать .Tolist();

такие как:

var states = (from s in yourentity.nameTbl
              select s).ToList();

чтобы получить лучшие результаты в получении одной записи, лучше использовать этот пример, потому что они имеют лучшую производительность. такие как:

var users = (from s in yourentity.UserTbls
             where s.User == Page.User.Identity.Name
             select s
            ).FirstOrDefault();

Для списка записей с подкачкой:

int page = 1; // set your page number here
var rooms = (from s in yourentity.yourtable
             where s.User == Page.User.Identity.Name
             orderby s.Id descending
             select new {s.Id,s.Name,s.User}
            ).Skip((page-1)*SetPageSize).Take(SetPageSize).ToList();
Другие вопросы по тегам