データアノテーションによるDapper.NETマッピング

dapper data-annotations

質問

だから私はこのようなプロパティを持つクラスを持っています:

public class Foo
{
  [Column("GBBRSH")
  public static string Gibberish { get; set;}
  ....
}

データを保存するために、私はupdate / insertステートメントがカスタム関数を使うように設定しました:

public static string GetTableColumnName(PropertyInfo property)
{
  var type = typeof(ColumnAttribute);
  var prop = property.GetCustomAttributes(type, false);

  if (propr.Count() > 0)
    return ((ColumnAttribute)prop.First()).Name;
  return property.Name;
}

これはうまく処理されますが、データを取得するときには、実際にこの特定の列の関数を介してデータを取り戻すわけではありません。私は、存在する他のデータが引き出されたことに気付きましたが、問題の列は検索しなかったデータを持つ唯一のフィールドでした。

1)おそらくDapperの検索部分にGetTableColumnName関数を使用する方法はありますか?

2)このようなシナリオが発生した場合、Dapper.NETに例外をスローする方法がありますか?実際にはそうでないときに、すべてが期待どおりに動作しているという誤ったセキュリティ感覚を望んでいません(Dapper.NETがデフォルトで使用しないマッピングを使用していますが、そのように設定してください)。

編集:

私はDapperのSqlMapperソースを見て、見つけました:

 private static IEnumerable<T> QueryInternal<T>(params) // my knowledge of generics is limited, but how does this work without a where T : object?
 {
   ...
   while (reader.Read())
   {
     yield return (T)func(reader);
   }
   ...
 }

私はこれを見つけた後、2つのことについて学びました。 Funcを読んで、利回りを読んでください。私の推測では、reader.Read()を別の関数(カラムヘッダーに対してチェックし、オブジェクトに適切に挿入する)に渡して、それを返す必要があると思います。

受け入れられた回答

select文を変更して"SELECT [Column("GBBRSH")] AS Gibberish"ようなエイリアスを操作し、属性名とpocoプロパティ名の間のマッピングを提供することができます。

この方法では、 Dapperは一致するプロパティを入力します.POCOだけが列の正確な名前と一致する必要があるからです。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow