我正在尝试实现像
SELECT * FROM TABLE_X WHERE XID = @id
这样的简单查询,但我遇到的问题是这些查询将针对不同的应用程序实例在不同的数据库(SQL Server 和 Oracle)上运行。
如何做到这一点而不必为每个数据库编写一组新的查询?
Dapper 确实对数据库是封闭的,并且允许您利用特定于特定数据库的纯 sql 技巧。在我看来,您应该使用查询对象模式,这样您在每次提取/提交之前都会有一个接口,该接口可能会针对 SQL/Oracle 进行更改。
我已经下载了SqlMapper.cs的代码并破解了
SetupCommand
来检查命令是否来自Oracle或SQL Server。
这就是我所做的:
if (cnn.GetType().Name.ToLowerInvariant().Contains("oracle"))
{
sql = sql.Replace('@', ':');
}