猿问

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

假设我在 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。

  1. 还有更多仅为 SQL 查询创建的动态变量

  2. 映射 null 将中断查询,即这里是 SQL 的结果

    NULL := StartDate代替@StartDate := StartDate

如何将 dapper 与 SQL 查询一起使用,其中查询正在创建不应由 Dapper 映射的动态变量?


天涯尽头无女友
浏览 117回答 1
1回答

慕慕森

只要您包含AllowUserVariables=true在连接字符串中,在使用 Dapper 的查询中使用 SQL 变量应该完全没有问题。这允许客户端库在您的 SQL 中“忽略”@TypeId并且@StartDate不需要在MySqlCommand.Parameters集合中指定它们。只要您在传递给 Dapper 的匿名对象中不包含具有这些名称的属性(即,不要这样做new { StartDate = DateTime.Now, TypeId = 1 }),Dapper 就不会使用这些名称创建任何参数,也不会将任何值映射到它们,并且将 SQL 传递给 MySQL 服务器以作为服务器端变量进行评估。
随时随地看视频慕课网APP
我要回答