使用Dapper调用T-SQL存储过程时,是否需要使用'@'?
我想用Dapper调用一个存储过程,到目前为止我看到的所有代码都是通过用@字符指定存储过程参数来完成的。这意味着我不能简单地定义模型类并将其传递到Dapper的Query或Execute方法中,重新翻译模型实例,这似乎浪费了时间和内存。这是我真正需要做的吗?使用Dapper调用T-SQL存储过程时,是否需要使用'@'?
例如,下面的代码接受模型实例。该模型具有sp_GetUser表的所有属性。我希望Dapper在调用它时将这些模型属性传递给存储过程的参数。这是这种情况还是我真的需要定义在'参数'参数中传递的对象?
public IList<User> GetUsers(UserSP user)
{
using (var cn = new SqlConnection(ConnectionString))
{
var users = cn.Query<User>("sp_GetUsers",
param: new
{
@Id = user.Id,
@NAme = user.Name,
@Age = user.Age
},
commandType: CommandType.StoredProcedure).ToList();
return users;
}
}
尝试这样的事情
类
public class ReportIndex
{
public int SlideNumber { get; set; }
public string ChartName { get; set; }
public string SheetName { get; set; }
}
填补了类短小精悍
public List<ReportIndex> GetReportIndex(int reportId)
{
List<ReportIndex> reportIndex = null;
using (var conn = new SqlConnection(connString))
{
conn.Open();
var p = new DynamicParameters();
p.Add("@ReportId", reportId);
reportIndex = conn.Query<ReportIndex>("sp_ReportGetReportIndex",
p,
commandType: CommandType.StoredProcedure).ToList();
}
return reportIndex;
}
你为什么使用'@'?你为什么使用'新的DynamicParameters()'? –
这是我使用短小精灵向SP发送参数的方式。 –
我问这是因为这篇文章中的问题是关于Dapper调用中的'@'字符。对我的问题的第一个评论回答了我的问题。 –
不,你不需要使用@字符数限制(HTTPS:/ /github.com/StackExchange/Dapper#parameterized-queries) – peco
太棒了。我是否仍然只需要传入可映射到过程参数的那些属性? –
你可以试试吗? param:用户 – Crowcoder