Méthode générique dapper pour le lazyloading de la propriété

c# dapper

Question

Im essayant de faire une méthode générique pour Dapper.Query. Maintenant, j'ai des ennuis. Voici mon exemple

   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.???
        }
    }

Comme vous le voyez ci-dessous, j'ai maintenant besoin des propriétés de t1 pour le charger avec t2. Est-ce seulement possible?

Cet exemple n'est pas terminé, bien sûr la chaîne "query" sera remplacée, c'est juste pour la démonstration.

Réponse acceptée

Dapper n'inclut pas le chargement paresseux et fournit exactement un support nul pour permettre un chargement différé, car ce n'est pas ce qu'il essaie de faire - c'est un utilitaire, pas un framework. Cependant, votre exemple suggère que vous parlez de données partitionnées horizontalement, par exemple, disons que nous avions:

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

et supposons pour simplifier que [foo] et [bar] ont tous deux une colonne Id (qu'il gère automatiquement, bien qu'il existe des moyens de spécifier les règles de partitionnement manuellement). Alors cela deviendrait:

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

ou quelque chose de similaire. Le point est: il matérialise le Foo et le Bar séparément (basé sur la partition), puis vous laisse vous soucier de la façon de les combiner.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi