Я заметил огромную разницу в том, как работает NPoco (или PetaPoco) в зависимости от того, какую функцию вы вызываете при использовании LINQ.Нормально ли для NPoco/PetaPoco Fetch() получить все данные, а затем фильтровать клиентскую сторону?
Например сравните Fetch(), который Query(), которые оба появляются сделать то же самое:
: Fetch<EntryImage>().Where(t => t.EntryType == type && t.EntryID == entryID);
B: Query<EntryImage>().Where(t => t.EntryType == type && t.EntryID == entryID);
А возвращается каждый строка в таблице (10 000+), а затем фильтрует клиентскую сторону.
B возвращает только один ряд, которого я ожидаю.
Я считаю, что такое поведение довольно опасно - было бы очень легко написать очень плохо исполняемый код без особого внимания. Это ожидаемое поведение? Если это нормальное поведение, есть ли способ получить список методов, которые работают таким образом, поэтому я могу избежать их использования там, где это возможно?
Это настолько опасно. Я хотел бы, чтобы был вариант конфигурации NPoco для исключения исключения, если вы вызываете любой из этих методов, чтобы избежать случайного использования их. – NickG
@NickG Вы можете написать анализатор Roslyn для просмотра «Fetch» в вашей кодовой базе и установить уровень предупреждения на «Ошибка», чтобы он не скомпилировался. –
Отличный ответ для NPoco - мне тоже нравятся ссылки на исходный код! – mjwills