没有映射,具有动态变量的Dapper无法正常工作。这会破坏SQL。如何在较大的SQL查询中使用Dapper?

时间:2019-03-07 16:14:54

标签: c# mysql sql dapper

假设我在MS SQL中存储了proc。现在,我已移至MySQL,并希望将所有SQL查询保留在C#asp.net核心应用程序内。

问题始于更大的查询,其中可能是SQL动态内部变量。

即  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

如何在SQL查询中动态创建不应由Dapper映射的变量的SQL查询中使用dapper?

1 个答案:

答案 0 :(得分:0)

只要在连接字符串中包含AllowUserVariables=true,在Dapper的查询中使用SQL变量就不会有任何问题。这样,客户端库就可以在SQL中“忽略” @TypeId@StartDate,而无需在MySqlCommand.Parameters集合中指定它们。

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