Fournir à Dapper une instance de classe à mapper au lieu d'en instancier toujours une nouvelle?

.net c# dapper orm

Question

J'ai parcouru la source et je ne trouve rien (bien que je ne sois pas très bon en IL), mais j'aimerais savoir s'il existe un moyen de fournir à Dapper une instance de classe au lieu d'en créer une nouvelle. La raison en est que nous pouvons parfois faire deux appels séparés à deux procédures stockées différentes: l’une renvoie des colonnes d’une «entité», l’autre renvoie d’autres colonnes. Cependant, au lieu de la deuxième requête utilisant l'entité reçue lors du premier appel, nous obtenons à la place deux instances de la même entité. Il serait beaucoup plus préférable que Dapper utilise la classe d'entité existante et mappe les résultats de la requête à cette classe existante.

Existe-t-il un moyen d'intercepter l'instanciation de classe de Dapper pour lui fournir une instance existante si nécessaire?

Réponse acceptée

Excellente question Pour le moment, il vous permet d'indiquer un constructeur particulier, mais il est toujours new :

 il.Emit(OpCodes.Newobj, specializedConstructor);

Ce que nous pourrions faire, c’est de pouvoir spécifier un constructeur ou une méthode de fabrication static ; Je soupçonne que ce ne serait qu'un changement de trois lignes au code du matérialisateur principal, plus quelques autres endroits. Ce n'est pas impossible, mais il se pose alors des questions telles que le contexte d'appel : comment dapper fournit-il un contexte spécifié par l'appelant à l'usine? Encore une fois: tout est possible (protobuf-net fait à peu près la même chose).

Mais rien de tout cela n'existe aujourd'hui. Ce ne serait pas impossible.



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