В хранилище, я делаю это:MVC 1.0 + EF: db.EntitySet.where (что-то) все еще возвращает все строки в таблице?
public AgenciesDonor FindPrimary(Guid donorId) {
return db.AgenciesDonorSet.Include("DonorPanels").Include("PriceAdjustments").Include("Donors").First(x => x.Donors.DonorId == donorId && x.IsPrimary);
}
затем вниз в другом методе в том же хранилище, это:
AgenciesDonor oldPrimary = this.FindPrimary(donorId);
В отладчике, то resultsview показывает все записи в этой таблице, но :
oldPrimary.Count();
1 (что должно быть).
Почему я вижу все найденные записи таблицы, а не только 1? Я думал, что фильтрация строк была выполнена в БД.
Если db.EntitySet действительно извлекает все для клиента, как правильно поддерживать клиентские данные с помощью EF? Получение всех строк не будет масштабироваться для того, что я делаю.
Но почему запрос всегда возвращал все строки в таблице, когда имеется только одна строка, соответствующая предикатам lamba? Это то, что меня беспокоит. Почти так же, как EntitySet, копирует всю таблицу в EF, а затем EF каким-то образом фильтрует вне базы данных. Это не будет работать для моих нужд, так как у меня есть тысячи строк. – Dale
Вы вызываете утверждение в отладчике, которое не отражает то, что на самом деле происходит в коде. Когда код выполняется, из базы данных будет извлекаться только одна строка. – mkedobbs