Почему Dbset реализует IEnumerable, когда он уже реализует IQueryable? - PullRequest
0 голосов
/ 18 февраля 2019

Dbset, кажется, реализует IEnumerable, когда у него уже есть IQueryable, разве это не делает реализацию IEnum избыточной, поскольку IQueryable уже реализует IEnum.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Прежде всего, мы должны исправить вашу терминологию:

IQueryable уже реализует IEnum.

IQueryable ничего не реализует.Он наследует IEnum, что означает, что каждый класс, который реализует IQueryable, должен реализовывать члены IEnum, а также элементы IQueryable.

Я думаю, что ваш вопросна самом деле это так: почему DbSet определяется как реализующий IEnum, когда он реализует IQueryable, поэтому ему все равно приходится реализовывать IEnum.

Технически, заявив, что DbSet реализует IEnum,

Что оставляет вопрос: зачем кому-то излишне указывать базовый интерфейс?

Я процитирую эту статью в блоге Эрика Липперта: https://blogs.msdn.microsoft.com/ericlippert/2011/04/04/so-many-interfaces/

Возможно, потому что они считают, что это делает код более простым для понимания и более самодокументируемым.

Или, возможно, разработчик написал код как

interface I1 {}

интерфейс I2 {}

интерфейс I3: I1, I2 {}

и понял, о, подождите минуту, I2 должен наследовать от I1.Почему для этого редактирования требуется, чтобы разработчик вернулся и изменил объявление I3, чтобы оно не содержало явного упоминания I1?Я не вижу причин заставлять разработчиков удалять избыточную информацию.

0 голосов
/ 18 февраля 2019

Иногда вам нужны все строки определенной таблицы без каких-либо дополнительных предложений where в формате IEnumerable.в этих обстоятельствах вы можете напрямую разыграть DbSet до IEnumerable.

...