Скажите, что я хочу протестировать логику запросов Entity Framework, одним из способов было бы преобразовать DbSet<T>
в IQueryable<T>
, прежде чем строить деревья выражений для легкой насмешки. Является ли это «безопасным» и есть ли что-нибудь, о чем нужно знать?Вызывает AsQueryable <T> на DbSet <T> «безопасный»?
ответ
Это не только безопасно, но и законно и полностью стандартно. Это то, о чем OO. Ты просто опустошен. A DbSet
Должно быть IQUeryable
, согласно договору, определенному дизайнерами.
Будьте осторожны с AsQueryable()
. Если одна из ваших переменных имеет тип IQueryable<IEntity>
после звонка AsQueryable()
, , вы больше не знаете, какой конкретный тип переменной (DbSet<IEntity>
в вашем примере).
В то время как это совершенно верно с точки зрения ООП (это целая точка интерфейсов!), Это может привести к множеству ошибок/ошибок. Помните, что пока вы не перечислите источник DbSet<IEntity>
, вы фактически не выполняете запрос.
Вот почему, например, вы не можете присоединиться в оперативной памяти IQueryable<IEntity>
(например new List<IEntity>{ ... }.AsQueryable()
) с результатом в DbSet<IEntity>
с использованием .Union(...)
...
Относительно смиренных, глядя на +5,0 документации HTTP: // msdn.microsoft.com/en-us/library/system.data.entity.dbset(v=vs.103).aspx (не удалось найти версию 6.0), DbSet, похоже, не наследует IQueryable, поэтому кажется мне немного подозрительным. – Dante
@JohnNevermore Посмотрите на общую версию: http://msdn.microsoft.com/en-us/library/gg696460(v=vs.103).aspx – ken2k
Глупый я, полностью пропустил это. Благодарю. – Dante