Пример явной загрузки 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();