我们使用 Oracle 作为我们的数据库供应商,并研究了用底层使用 Dapper 的更健全的基于存储库的模式替换我们的一些数据访问层(难以维护,更难合并 XSD)。但是,我们在将它与 oracle 一起使用时遇到了一些问题。
命名参数:这些似乎被忽略,无论何时在查询中使用它们时,Oracle 似乎都以它喜欢的任何顺序解释它们。 SqlMapper 返回正确命名的参数,它们只是在 Oracle 中没有被正确解释
变量的“@”命名约定与 oracle 命名参数不兼容。它期望在任何参数前面看到“:”
有没有人以前遇到过这个问题并且有任何解决方法?
最佳答案
IMO,这里正确的方法是不(根据已接受的答案)使用数据库特定参数前缀(所以 @
sql-server, :
for oracle) - 而是:完全不使用前缀。所以最终这是:
il.Emit(OpCodes.Ldstr, prop.Name);
(等)
特别是,static
属性会很糟糕,因为它会限制您在每个 AppDomain
中只能使用一个供应商。
Dapper 已根据此更改进行了更新。它现在还动态检测 BindByName
并相应地设置它(所有这些都不需要引用 OracleCommand
)。
关于c# - 将 Dapper 与 Oracle 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6212992/