c# - 将 Dapper 与 Oracle 结合使用

标签 c# oracle dapper

我们使用 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/

相关文章:

c# - ParameterOverride 在 System.Type 参数上失败

c# - 根据条件显示 DropdownList 的最佳方法

asp.net - 在oracle的like子句中使用参数

c# - 使用 Async 和 Await 中断数据库调用(使用 Dapper)

c# - Parallel.ForEach 或 Task.WhenAll 涉及异步操作时?

sql - oracle sql创建组契约(Contract)一个表而不重复

oracle - 重构 PL/SQL

c# - Net Core Connection String Dapper visual studio 2017

c# - 使用 dapper,为什么在一次使用连接时创建的临时表在第二次使用同一连接时不可用

c# - 方法重载中的 Expression<Func<T,bool>> 与 Func<T,bool>