我在我的项目中使用Dapper。我有一个SqlParameter列表,我想将它发送给Dapper。但是Dapper需要一个对象(名称,值)。我该如何将SqlParameter转换为对象。我知道这行不通:
conn.Query<TModel>(sql, parameters.Select(p => new {p.ParameterName=p.Value}))
有什么建议吗?
我本来在寻找其他东西时偶然发现了这个,但我可以提供一些见解,可能会对未来的其他人有所帮助。
您可以使用Dapper.DynamicParameters对象添加可合法传递给Dapper查询的项目,即(手动编码)
var args = new DynamicParameters(new {});
parameters.ForEach(p => args.Add(p.ParameterName, p.Value));
conn.Query<TModel>(sql, args );
HTH
var parameters = new DynamicParameters();
parameters.Add(name: "@UserId", value: obj.DriverId, dbType: DbType.String, direction: ParameterDirection.Input);
parameters.Add(name: "@Password", value: obj.DPassword, dbType: DbType.String, direction: ParameterDirection.Input);
parameters.Add(name: "@IMEINo", value: obj.IMEINo, dbType: DbType.String, direction: ParameterDirection.Input);
return DatabaseHub.Query<object>(storedProcedureName: @"[dbo].[sp_m_GetAppLoginCheckData]", parameters: parameters, dbName: AMSDB).FirstOrDefault();
new { Id = 100, Name = "name" }
其他定义的类型只有在它们的属性具有getter和setter时才能正常工作:
public class MyArg
{
public long Id { get; set; }
public string Name { get; set; }
}
即非:
public class MyArg
{
public long Id;
public string Name;
}