Powiedz, że chcę przeprowadzić test jednostkowy w logice zapytań Entity Framework, jednym ze sposobów byłoby przekonwertowanie DbSet<T>
na IQueryable<T>
przed zbudowaniem drzewek wyrażeń dla łatwego kpienia. Czy jest to "bezpieczne" i czy jest coś, o czym należy pamiętać?Czy wywołanie AsQueryable <T> jest bezpieczne "DbSet <T>"?
Odpowiedz
Jest nie tylko bezpieczny, ale również legalny iw pełni standard. O to właśnie chodzi w OO. Po prostu jesteś spuszczony. A DbSet
MUSI być IQUeryable
, zgodnie z umową określoną przez projektantów.
Należy zachować ostrożność pod numerem AsQueryable()
. Jeśli jedna z twoich zmiennych jest typu IQueryable<IEntity>
po wywołaniu AsQueryable()
, , nie wiesz już, jaki konkretny typ zmiennej to (DbSet<IEntity>
w twoim przykładzie).
Podczas gdy jest całkowicie ważny z perspektywy OOP (to jest cały punkt interfejsów!), Może to prowadzić do wielu błędów/błędów. Pamiętaj, że dopóki nie wyliczysz źródła DbSet<IEntity>
, nie wykonasz zapytania.
Dlatego na przykład nie można dołączyć in-memory IQueryable<IEntity>
(np new List<IEntity>{ ... }.AsQueryable()
) z wyniku DbSet<IEntity>
wykorzystaniem .Union(...)
...
Jeśli chodzi o przygnębiony, patrząc na http 5.0 Dokumentacja: // msdn.microsoft.com/en-us/library/system.data.entity.dbset(v=vs.103).aspx (nie można znaleźć wersji 6.0), DbSet nie dziedziczy z IQueryable, dlatego wydaje mi się trochę podejrzany. – Dante
@JohnNevermore Spójrz na ogólną wersję: http://msdn.microsoft.com/en-us/library/gg696460(v=vs.103).aspx – ken2k
Silly me, totalnie to przegapiłem. Dzięki. – Dante