Método dapper genérico para lazyloading de propiedad

c# dapper

Pregunta

Estoy tratando de hacer un método genérico para Dapper.Query. Ahora me he metido en problemas. Aquí está mi ejemplo

   public IEnumerable<T1> Lazy<T1, T2>(T2 table) where T1 : EntityBase
    {

        using (IDbConnection cn = GetCn())
        {
            cn.Open();

            return cn.Query<T1, T2, T1>("query", (t1, t2) => { t1.???
        }
    }

Como se ve a continuación, necesito ahora las propiedades en t1 para cargarlo con t2. ¿Esto es posible?

Este ejemplo no se completa, por supuesto la cadena de "consulta" será reemplazada, esto es solo para demostración.

Respuesta aceptada

Dapper no incluye la carga diferida, y proporciona exactamente cero soporte para ayudar a alcanzar la carga diferida, porque eso no es lo que está tratando de hacer : es una utilidad, no un marco. Sin embargo, su ejemplo sugiere que está hablando de datos particionados horizontalmente, por ejemplo, digamos que tuvimos:

select foo.*, bar.*
from foo inner join bar on bar.ParentId = foo.Id
where foo.Category = @category

y supongamos por simplicidad que tanto [foo] como [bar] tienen una columna Id (que maneja automáticamente, aunque hay formas de especificar las reglas de partición manualmente). Entonces esto se convertiría en:

return cn.Query<Foo, Bar, Foo>(query, args, (foo, bar) => {
    foo.Bar = bar;
    return foo;
});

o algo similar. El punto es: materializa el Foo y la Bar separado (en función de la partición), y luego te permite preocuparte sobre cómo combinarlos.



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