发布
社区首页 >问答首页 >Dapper中DynamicParameters含量的测定

Dapper中DynamicParameters含量的测定
EN

Stack Overflow用户
提问于 2015-07-08 16:28:00
回答 1查看 2.1K关注 0票数 4

我们正在将数据库从Oracle迁移到MySQL。Oracle对绑定变量@:使用不同的字符。我们正在使用Dapper查询数据库。我们将DynamicParameters传递到Dapper中,绑定变量可以工作。

我想要做的是通过DynamicParameters,查看值的名称并更改前面的字符,然后在SQL字符串中替换它。我知道我会怎么做。

我遇到的问题是,您不能枚举DynamicParameters来获取键和值。

我的想法是尝试使用反射在运行时获取私有<string, DynamicParameters.ParamInfo> parameters字段。我想不出如何使它工作,因为DynamicParameters.ParamInfo是一个私有类。

对我能做什么有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 03:03:17

你的问题有两个部分,第一部分:

我想要做的是通过DynamicParameters,查看值的名称并更改前面的字符

第二个问题是:

然后在SQL字符串中也替换它。

第一部分让我感兴趣的是Dapper有多聪明。它证明了在DynamicParameters中处理传递给它的参数是非常明智的。考虑到你有以下几点:

代码语言:javascript
代码运行次数:0
复制
// Source of the DynamicParameters
var args = new Dictionary<string,string>();
args.Add("@emailPromotion", "1");
// additional args goes here

// An example of how you build a DynamicParameters
var dbArgs = new DynamicParameters();
foreach (var pair in args) dbArgs.Add(pair.Key, pair.Value);

// The query - using SQL Server (AdventureWorks)
var sql = "select * from Person.Contact WHERE EmailPromotion = @EmailPromotion";

// The Dapper call (this works as expected)
var items = the_connection.Query<dynamic>(sql, dbArgs);    

现在假设您使用colon从Oracle迁移,并从这个源传递您的DynamicParameters:

代码语言:javascript
代码运行次数:0
复制
var oracle_args = new Dictionary<string,string>();
oracle_args.Add(":emailPromotion", "1");

如果您在前面给出的其余代码中使用该oracle_args,那么它仍然可以工作。您可能认为它不会,因为Server无法理解冒号。唯一会导致错误的是,如果查询本身(var sql)具有无效字符-- colon

,这与你的问题有什么关系?,这意味着你不必担心“第一部分”,让Dapper做好它的工作。您只需处理“第二部分”并调整(sql)查询即可。如果您完全控制了查询,那么它就不会给您带来任何问题。一个简单的字符串替换就能做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31298448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档