Dire che voglio testare la logica di query di Entity Framework, un modo sarebbe quello di convertire lo DbSet<T>
in IQueryable<T>
prima di costruire gli alberi di espressione per semplificare il mocking. Questo è "sicuro" e c'è qualcosa di cui essere a conoscenza?Chiama AsQueryable <T> su un DbSet <T> "sicuro"?
risposta
Non è solo sicuro, è legale e completamente standard. Questo è ciò che riguarda OO. Hai appena abbattuto. Un DbSet
deve essere un IQUeryable
, per il contratto definito dai progettisti.
Fare attenzione con AsQueryable()
. Se una delle variabili è di tipo AsQueryable()
, AsQueryable()
, , non si sa più quale sia il tipo di calcestruzzo della variabile è (DbSet<IEntity>
nell'esempio).
Mentre è perfettamente valido da una prospettiva OOP (che è l'intero punto delle interfacce!), Può portare a un sacco di bug/errori. Ricordare che finché non si enumera un'origine DbSet<IEntity>
, non si esegue effettivamente la query.
Ecco perché ad esempio non è possibile partecipare a una in memoria IQueryable<IEntity>
(ad esempio new List<IEntity>{ ... }.AsQueryable()
) con il risultato di una DbSet<IEntity>
utilizzando .Union(...)
...
- 1. Come utilizzare l'espressione del generatore CMake $ <TARGET_FILE: tgt>?
- 2. Cosa si chiama "operatore <<"?
- 3. Quando utilizzare DbSet <T> .Add() vs DbSet <T> .Attach()
- 4. Come si converte questo IQueryable <Patient> in DbSet <Patient>?
- 5. iterazione su DbSet <TEntity> vs IQueryable <out T>
- 6. GSSException: nessuna credenziale valida fornita (livello meccanismo: impossibile trovare tgt Kerberos)
- 7. Metodo generico per recuperare DbSet <T> da DbContext
- 8. Utilizzando IQueryable <TEntity> invece DbSet <TEntity> problema
- 9. EF6 DbSet <T> restituisce NULL in Moq
- 10. Riferimenti per DBContext, DBSet <> in Entity Framework
- 11. c'è qualcosa come DbSet <T> .RemoveWhere (Predicate <T>)
- 12. Come convertire DbSet <T> in Elenco <T>
- 13. GIT i file corrotti (<<<<<<<< testa)
- 14. Domanda sull'operatore ostream <<
- 15. <% $, <% @, <% =, <% # ... qual è il problema?
- 16. Quando si utilizza DbSet <T> .SqlQuery(), come utilizzare i parametri denominati?
- 17. Generics - chiama un metodo su ogni oggetto in un elenco <T>
- 18. Perché non chiama Task <T>.Result deadlock?
- 19. Fare un predicato riutilizzabile per EntitySet <T>, IQueryable <T> e IEnumerable <T>
- 20. Espressione <Func <TModel, stringa >> su Expression <Azione <TModel>> "Getter" su "Setter"
- 21. Confronto (<), uscita (<<) e assegnazione (=) per boost :: opzionale
- 22. PHP espressione <<< EOB
- 23. Come generalizzare l'accesso ai membri DbSet <TEntity> di un DbContext?
- 24. EJS: <% = versus <% -
- 25. Esiste un DbSet <TEntity>. Equivalente locale in Entity Framework 7?
- 26. chiamante operatore << in gdb
- 27. cout << "привет"; o wcout << L "привет";
- 28. Come si chiama l'operatore << in Ruby quando viene utilizzato per aggiungere elementi?
- 29. cout << stringstream
- 30. PHP: <<< vs ob_start
Per quanto riguarda gli afflitti, guardando il 5,0 documentazione di http: // msdn.microsoft.com/en-us/library/system.data.entity.dbset(v=vs.103).aspx (impossibile trovare una versione 6.0), DbSet non sembra ereditare da IQueryable, è per questo che sembra un po 'strano per me. – Dante
@JohnNevermore Guarda la versione generica: http://msdn.microsoft.com/en-us/library/gg696460(v=vs.103).aspx – ken2k
Silly me, totalmente perso. Grazie. – Dante