Está llamando a AsQueryable <T> en un DbSet <T> &quot;seguro&quot;?

.net c# entity-framework-6

Pregunta

Digamos que quiero probar la lógica de consulta de Entity Framework, una forma sería convertir el DbSet<T> a IQueryable<T> antes de construir los árboles de expresiones para un simulacro fácil. ¿Es esto "seguro" y hay algo de qué tener en cuenta?

Respuesta aceptada

No solo es seguro, es legal y totalmente estándar. De esto se trata OO. Usted acaba de abatirse. Un DbSet que ser un IQUeryable , según el contrato definido por los diseñadores.


Respuesta popular

Tenga cuidado con AsQueryable() . Si una de sus variables es de tipo IQueryable<IEntity> después de llamar a AsQueryable() , ya no sabe cuál es el tipo concreto de la variable ( DbSet<IEntity> en su ejemplo).

Si bien es perfectamente válido desde una perspectiva OOP (¡ese es el punto central de las interfaces!), Puede llevar a muchos errores / errores. Recuerde que hasta que no enumere una DbSet<IEntity> , en realidad no ejecuta la consulta.

Por eso, por ejemplo, no puede unirse a una IQueryable<IEntity> en memoria (por ejemplo, la new List<IEntity>{ ... }.AsQueryable() ) con el resultado de un DbSet<IEntity> .Union(...) usando .Union(...) ...




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué