¿Cuál es la diferencia entre buscar y consultar?
Pregunta
Para mí, PetaPoco Database.Fetch
y Database.Query
parece estar haciendo lo mismo.
Por ejemplo,
var db = new PetaPoco.Database("myDB");
ProductList products = db.Fetch<ProductList>("SELECT * FROM ProductList");
ProductList products = db.Query<ProductList>("SELECT * FROM ProductList");
¿Hay alguna diferencia significativa entre ellos?
Solución
De acuerdo con la Documentación de PetaPoco, esta es la respuesta:
Consulta vs recuperación
La clase Base de datos tiene dos métodos para recuperar registros: Consulta y Búsqueda.Estos son prácticamente idénticos, excepto que Fetch devuelve una Lista <> de POCO, mientras que Query usa el retorno de rendimiento para iterar sobre los resultados sin cargar todo el conjunto en la memoria.
Otros consejos
La recuperación y la consulta se comportan de manera diferente si las usa dentro de una transacción.Tuve un caso de uso en el que necesitaba actualizar varias tablas en una transacción pero necesitaba recuperar algunos datos de una tabla de referencia en medio de la secuencia.
Cuando recuperé los datos con Consulta y las inserciones o actualizaciones posteriores fallaron con una InvalidOperationException:"Ya existe un DataReader abierto asociado con este comando que debe cerrarse primero"
La solución fue reemplazar la consulta con Fetch y pude completar la secuencia.
El pseudocódigo para esto es:
BeginTransaction
Update Tbl1
Update Tbl2
Query RefTblA ## Changed Query to Fetch to avoid: '...already an open DataReader..." exception
Update Tbl3 using data from RefTblA
CompleteTransaction