質問: 私たちはデータベースプロバイダとしてOracleを使用し、下層のDapperを使用して、データアクセス層の一部(保守が難しく、XSDをマージするのが難しい)をより安全なリポジトリベースのパターンに置き換えました。しかし、oracleで使用する際には、いくつかの問題が発生しています。 * 名前付きパラメータ:これらは無視されているように見えますが、問合せで使用されるときはいつでも、Oracleはそれらを任意の順序で解釈するようです。 SqlMapperは正しく名前付きのパラメータを返しますが、Oracleでは正しく解釈されません * 変数の "@"命名規則は、oracleという名前の付いたパラメータと互換性がありません。どのパラメータの前にも ":"が表示されることが期待されます 誰か以前にこれに遭遇したことがあり、回避策がありますか?
回答: IMO、ここで正しいアプローチは(ように、データベース固有のパラメータのプレフィックスを使用***しない***ように(受け入れ答えあたりなど)される`@` 、SQLサーバー用`:` Oracle用) -ではなく、むしろ: *まったく*接頭辞を使用していません。だから最終的にこれは: ``` il.Emit(OpCodes.Ldstr, prop.Name); ``` (等) 特に、 `AppDomain`ごとに1つのベンダに制限されるため、 `static`プロパティは悪いでしょう。 この変更によりDapperが更新されました。また、 `BindByName`を動的に検出し、それに応じて設定します(すべて`OracleCommand`への参照を必要としません)。