Utilisation de Dapper avec Oracle
Nous utilisons Oracle comme base de données de notre fournisseur et nous avons examiné en remplaçant une partie de notre couche d'accès aux données (difficile à maintenir, plus difficile à fusionner XSD) avec une saner référentiel en fonction du motif à l'aide de Dapper à la couche inférieure. Cependant, nous avons frappé un certain nombre de problèmes lors de l'utilisation de oracle.
- Paramètres nommés: ceux-ci semblent être ignorées, à chaque fois qu'ils sont utilisés dans une requête Oracle semble interpréter dans n'importe quel ordre il croit. Le SqlMapper retourne correctement les paramètres nommés, qu'ils ne sont pas interprétés correctement dans Oracle
- Le "@" convention d'affectation de noms pour les variables est incompatible avec l'oracle des paramètres nommés. Il s'attend à voir ":" en face de tous les paramètres
Personne n'a jamais rencontrés et n'ont aucune solution de contournement?
source d'informationauteur Wolfwyrd
Vous devez vous connecter pour publier un commentaire.
De l'OMI, de l'approche correcte ici est pas (conformément à la accepté de répondre) utiliser la base de données de paramètres spécifiques préfixe (donc
@
pour sql-server,:
pour oracle) - mais plutôt: utilisez pas de préfixe à tous les. Si, finalement, c'est:(etc)
En particulier, un
static
propriété serait une mauvaise chose car elle permettrait de vous limiter à un seul fournisseur parAppDomain
.Dapper a été mis à jour avec ce changement. Il est également maintenant détecte dynamiquement
BindByName
et définit en conséquence (le tout sans avoir besoin d'une référence àOracleCommand
).Résolution du paramètre nommé question s'est avéré être parce que les commandes Oracle exiger la BindByName propriété est définie sur true. Pour résoudre ce besoin d'un réglage pour la SqlMapper lui-même. C'est un peu méchant comme le tweak n'est pas portable (il s'appuie sur un contrôle de type pour un Oracle de Commande), mais il fonctionne pour nos besoins pour le moment. Le changement implique la mise à jour de la SetupCommand méthode, après la création de la commande constituent le lien de l'objet, nous le type de contrôle et réglage de l'indicateur comme si (~ln 635):
Enfin à aborder la question de la "@" pour ":" problème dans les noms de paramètres impliqués modifiant la CreateParamInfoGenerator méthode. J'ai ajouté une chaîne statique - DefaultParameterCharacter fixant sa valeur à ":" puis modifié ln 530 à partir de:
à
et ln 546 à partir de:
:
Ce fait dapper fonctionnent parfaitement avec les commandes Oracle