Le chargement paresseux est-il possible dans Dapper? Et quelle est la différence entre l'API générique (POCO) et l'API dynamique?

c# dapper

Question

J'ai deux questions sur le travail avec dapper:

  1. Y at-il un moyen de charger la propriété de la clé de navigation comme entité-framework (chargement différé)?

  2. Quelle est la différence entre la POCO serialization et dynamic serialization ? ce qui est mieux? et comment puis-je utiliser cette sérialisation?

Réponse acceptée

existe-t-il un moyen de charger la propriété de la clé de navigation comme entité-framework (chargement différé)?

Non, Dapper est une bibliothèque SQL directe, et c'est pourquoi elle est tellement rapide. Il n'y a pas de surcharge autour du chargement automatisé. Vous pouvez toutefois charger plusieurs entités à la fois.

Quelle est la différence entre la sérialisation POCO et la sérialisation dynamique? ce qui est mieux? et comment puis-je utiliser cette sérialisation?

La sérialisation POCO est plus efficace car le type est bien connu au moment de la compilation, la sérialisation dynamique est un peu plus coûteuse car elle doit être évaluée à l'exécution. En dehors de cela, il n’ya pas vraiment de différence.

Cependant, je recommanderais Dapper au-dessus de toutes les autres bibliothèques n'importe où. C'est simple, rapide et extrêmement flexible. Et croyez-moi, j'ai utilisé beaucoup de frameworks et de bibliothèques pour accéder aux données.

Documentation Dapper

Jetez un coup d'œil à la cartographie multiple et aux résultats multiples


Réponse d'expert

1: non; pas du tout, à moins que vous ne le rouliez entièrement vous-même. Il est intentionnellement minimaliste et déterministe

2: la matérialisation dans un POCO est pratique si vous souhaitez exposer ces données à d'autres parties de votre application, par exemple en tant que données pour un modèle de vue; Query<Customer> , par exemple, peut renseigner des objets Customer connus sur lesquels vous pouvez coder à d'autres endroits. dynamic est très pratique , mais elle n'est pas très explicable - et ne fonctionnera pas bien pour la liaison de données ou intellisense. Il est cependant très pratique pour les méthodes DAL qui restent très locales ou par exemple

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

ou:

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



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