Вызывает AsQueryable <T> на DbSet <T> &quot;безопасно&quot;?

.net c# entity-framework-6

Вопрос

Предположим, что я хочу, чтобы DbSet<T> логика запросов Entity Framework DbSet<T> тест, одним из способов было бы преобразовать DbSet<T> в IQueryable<T> прежде чем строить деревья выражений для легкой насмешки. Является ли это «безопасным» и есть ли что-нибудь, о чем нужно знать?

Принятый ответ

Это не только безопасно, но и законно и полностью стандартно. Это то, о чем OO. Ты просто опустошен. DbSet должен быть IQUeryable , согласно контракту, определенному дизайнерами.


Популярные ответы

Будьте осторожны с AsQueryable() . Если одна из ваших переменных имеет тип IQueryable<IEntity> после вызова AsQueryable() , вы больше не знаете, что такое конкретный тип переменной ( DbSet<IEntity> в вашем примере).

Хотя это совершенно справедливо с точки зрения ООП (вот в чем смысл интерфейсов!), Это может привести к множеству ошибок / ошибок. Помните, что пока вы не перечислите источник DbSet<IEntity> , вы фактически не выполняете запрос.

Вот почему, например, вы не можете присоединиться к IQueryable<IEntity> в памяти (например, new List<IEntity>{ ... }.AsQueryable() ) с результатом DbSet<IEntity> с использованием .Union(...) ...




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему