为了账号安全,请及时绑定邮箱和手机立即绑定

如果没有映射,具有动态变量的 Dapper 将无法工作。这会破坏 SQL

如果没有映射,具有动态变量的 Dapper 将无法工作。这会破坏 SQL

C#
天涯尽头无女友 2022-10-15 15:12:19
假设我在 MS SQL 中有一个存储过程。现在我已经转移到 MySQL,我想将所有 SQL 查询保留在 C# asp.net 核心应用程序中。问题始于更大的查询,其中可能是 SQL 动态内部变量。IE Select @TypeId := TypeId, @StartDate := StartDate  From Test_test  Where Id = @Id 在此示例中,@Id 应该由 Dapper 映射(此变量从 DAL 传递到 MySQL 数据库),但是不应映射 @TypeId 和 @StartId。还有更多仅为 SQL 查询创建的动态变量映射 null 将中断查询,即这里是 SQL 的结果NULL := StartDate代替@StartDate := StartDate如何将 dapper 与 SQL 查询一起使用,其中查询正在创建不应由 Dapper 映射的动态变量?
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

只要您包含AllowUserVariables=true在连接字符串中,在使用 Dapper 的查询中使用 SQL 变量应该完全没有问题。这允许客户端库在您的 SQL 中“忽略”@TypeId并且@StartDate不需要在MySqlCommand.Parameters集合中指定它们。

只要您在传递给 Dapper 的匿名对象中不包含具有这些名称的属性(即,不要这样做new { StartDate = DateTime.Now, TypeId = 1 }),Dapper 就不会使用这些名称创建任何参数,也不会将任何值映射到它们,并且将 SQL 传递给 MySQL 服务器以作为服务器端变量进行评估。


查看完整回答
反对 回复 2022-10-15
  • 1 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信