我有一个使用dapper和Oracle的相当大的应用程序。现在,我想支持SQL Server。
问题是我的所有查询都是用以下内容编写的:
而不是@
,所以SQL Server抱怨:
':'附近的语法不正确
有可能告诉Dapper它应该替换:
用@
或者我必须在我自己的代码中这样做吗?
这不是内置的,但您可以通过编写自定义扩展方法并执行您需要的任何调整来相对简单地提供它:
public static IEnumerable<T> MyMagicQuery<T>(this IDbConnection conn,
string query, object args = ...)
{
query = RunSomeRegexReplace(query);
return conn.Query<T>(query, args, ...);
}
然而,虽然这方面的正则表达式并不特别重要,但更大的问题是T / SQL和PL / SQL都是SQL的不同变体 。通过简单的直接翻译,许多功能根本不起作用。其他功能可能有效,但需要不同的语法。第三组功能可能在语法上有效,但会给出不同的结果 (是的,真的),或者具有非常不同的性能特征,除非重写以利用特定于RDBMS的首选项。
从根本上说,在RDBMS之间进行更改不仅仅是将@
更改为:
。