使用Dapper DynamicParameters构造函数,有没有办法排除某些参数被包含在内。例如,假设我有以下实体,
public class EntityA
{
public string Method1 { get; set; }
public string Method2 { get; set; }
public string Method3 { get; set; }
}
我正在调用一个只有Method1和Method2作为参数的存储过程,我可以让DynamicParameters方法只传递这两个参数并跳过第三个参数吗?对于我的实例,我的实体有很多属性,宁愿使用排除场景而不是手动指定参数。
答案 0 :(得分:1)
这里最简单的选项是匿名投影 - 如果需要添加其他自定义参数,可以对参数对象本身或DynamicParameters
参数执行此操作;例如:
conn.Execute(sql, new { obj.Foo, obj.Bar });
或:
var args = new DynamicParameters(new { obj.Foo, obj.Bar });
// not shown: add some more custom parameters
conn.Execute(sql, args);
答案 1 :(得分:0)
您可以使用如下所示的扩展方法生成动态参数。在像我这样的情况下,我有大量参数,节省了一点时间。
public static class ParameterExtensions
{
public static DynamicParameters ConvertToDynamicParameters<T>(this T incoming)
{
DynamicParameters dynamicParameters = new DynamicParameters();
foreach (PropertyInfo property in incoming.GetType().GetProperties())
{
object value = GetPropValue(incoming, property.Name);
if (value != null) dynamicParameters.Add(property.Name, value);
}
return dynamicParameters;
}
private static object GetPropValue(object src, string propName)
{
return src.GetType().GetProperty(propName)?.GetValue(src, null);
}
}