0

Dapper DynamicParameters コンストラクターを使用して、特定のパラメーターが含まれないようにする方法はありますか。たとえば、次のエンティティがあるとします。

public class EntityA
{
    public string Method1 { get; set; }
    public string Method2 { get; set; }
    public string Method3 { get; set; }
}

Method1 と Method2 のみをパラメーターとして持つストアド プロシージャを呼び出しています。DynamicParameters メソッドでこれら 2 つのパラメーターのみを渡し、3 番目のパラメーターをスキップすることはできますか? 私のライブの例では、エンティティに多くのプロパティがあり、パラメーターを手動で指定するよりも除外シナリオを使用したいと考えています。

4

2 に答える 2

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);
于 2013-07-05T07:23:05.673 に答える
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);
    }
}
于 2016-10-11T14:54:03.450 に答える