Actualmente estoy usando Entity Framework para mi acceso a base de datos, pero quiero echar un vistazo a Dapper. Tengo clases como esta:
public class Course{
public string Title{get;set;}
public IList<Location> Locations {get;set;}
...
}
public class Location{
public string Name {get;set;}
...
}
Por lo tanto, un curso se puede enseñar en varios lugares. Entity Framework hace el mapeo por mí, por lo que mi objeto del curso se llena con una lista de ubicaciones. ¿Cómo haría esto con Dapper, es posible o tengo que hacerlo en varios pasos de consulta?
Respuestas:
Dapper no es un ORM completo, no maneja la generación mágica de consultas y demás.
Para su ejemplo particular, lo siguiente probablemente funcionaría:
Agarra los cursos:
Agarra el mapeo relevante:
Agarra las ubicaciones relevantes
Mapearlo todo
Dejando esto al lector, crea algunos mapas e itera a través de los cursos que se completan con las ubicaciones.
Tenga en cuenta que el
in
truco funcionará si tiene menos de 2100 búsquedas (Sql Server), si tiene más, probablemente desee modificar la consulta,select * from CourseLocations where CourseId in (select Id from Courses ... )
si ese es el caso, también puede eliminar todos los resultados de una vez usandoQueryMultiple
fuente
Alternativamente, puede usar una consulta con una búsqueda:
Ver aquí https://www.tritac.com/blog/dappernet-by-example/
fuente
No hay necesidad de
lookup
diccionariofuente
Sé que realmente llego tarde a esto, pero hay otra opción. Puedes usar QueryMultiple aquí. Algo como esto:
fuente
Perdón por llegar tarde a la fiesta (como siempre). Para mí, es más fácil usar un
Dictionary
, como lo hizo Jeroen K , en términos de rendimiento y legibilidad. Además, para evitar la multiplicación de encabezados entre ubicaciones , utilizoDistinct()
para eliminar duplicaciones potenciales:fuente
Algo falta. Si no especifica cada campo
Locations
en la consulta SQL, el objetoLocation
no se puede completar. Echar un vistazo:Usando
l.*
en la consulta, tenía la lista de ubicaciones pero sin datos.fuente
No estoy seguro de si alguien lo necesita, pero tengo una versión dinámica sin Modelo para una codificación rápida y flexible.
fuente