¿Es posible la carga lenta en apuesto? ¿Y cuál es la diferencia entre la API genérica (POCO) y la dinámica?

c# dapper

Pregunta

Tengo dos preguntas sobre cómo trabajar con Dapper:

  1. ¿Hay alguna forma de cargar la propiedad clave de navegación como entidad-marco (carga lenta)?

  2. ¿Cuál es la diferencia entre la POCO serialization y dynamic serialization ? ¿cual es mejor? y ¿cómo puedo usar esta serialización?

Respuesta aceptada

¿Hay alguna forma de cargar la propiedad clave de navegación como entidad-marco (carga lenta)?

No, Dapper es una biblioteca de SQL directo, y es por eso que es tan ridículamente rápido. No hay una carga automática que rodea el techo. Sin embargo, puedes cargar más de una entidad a la vez.

¿Cuál es la diferencia entre la serialización POCO y la serialización dinámica? ¿cual es mejor? y ¿cómo puedo usar esta serialización?

La serialización POCO es más eficiente porque el tipo es bien conocido en tiempo de compilación, la serialización dinámica es un poco más costosa porque debe evaluarse en tiempo de ejecución. Aparte de eso, no hay realmente una diferencia.

Sin embargo, recomendaría Dapper sobre todas las demás bibliotecas en cualquier lugar. Es simple, rápido y extremadamente flexible. Y créanme, he usado muchos marcos y bibliotecas para el acceso a datos.

Dapper Documentation

Eche un vistazo a Multi Mapping y Multiple Results


Respuesta experta

1: no; ninguno en absoluto, a menos que lo enrolles por completo tú mismo. Es intencionalmente minimalista y determinista

2: materializar en un POCO es útil si desea exponer esos datos a otras partes de su aplicación, por ejemplo, como datos para un modelo de vista; Por ejemplo, Query<Customer> puede rellenar objetos conocidos del Customer contra los que puede codificar en otros lugares. dynamic es muy conveniente , pero no es muy explorable , y no funcionará bien para el enlace de datos o intellisense. Sin embargo, es realmente útil para los métodos DAL que siguen siendo muy locales, o ejemplo

var row = conn.Query("select qty, cost from parts where id = @id",
    new { id }).Single();
int qty = row.qty;
decimal cost = row.cost;
// and off we go...

o:

var lookup = conn.Query("select id, name from somelookup").ToDictionary(
      x => (int)x.id, x => (string)x.name);


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow