假设我在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不应被映射。
将null映射将中断查询,即这是SQL的结果
NULL := StartDate
而不是@StartDate := StartDate
如何在SQL查询中动态创建不应由Dapper映射的变量的SQL查询中使用dapper?
答案 0 :(得分:0)
只要在连接字符串中包含AllowUserVariables=true
,在Dapper的查询中使用SQL变量就不会有任何问题。这样,客户端库就可以在SQL中“忽略” @TypeId
和@StartDate
,而无需在MySqlCommand.Parameters
集合中指定它们。
只要您在传递给Dapper的匿名对象中不包含具有这些名称的属性(即,不要执行new { StartDate = DateTime.Now, TypeId = 1 }
),Dapper就不会使用这些名称创建任何参数, t将任何值映射到它们,并将SQL传递给MySQL Server,以作为服务器端变量进行评估。