[解決済み] DataReaderをList<T>に簡単に変換するには?重複
質問
の中にデータを入れています。
DataReader
に変換したい。
List<T>
.
このための可能な簡単な解決策は何ですか?
例えば、CustomerEntityクラスで、私はCustomerIdとCustomerNameプロパティを持っています。
List<CustomerEntity>
.
どのように解決するのですか?
ReflectionとPropertiesまたはFieldの属性を使用して、DataReaderをオブジェクトにマッピングしているシステムを見たことがあります。 (LinqToSql が行うことに少し似ています。) これらは、タイピングを少し節約し、DBNull などのコーディング時のエラー数を減らすことができます。 一度、生成されたコードをキャッシュすれば、ほとんどの手書きのコードよりも速くなります。 を考慮してください。 を検討してください。
参照 "A Defense of Reflection in .NET" を参照してください。
すると、次のようなコードを書くことができます。
class CustomerDTO
{
[Field("id")]
public int? CustomerId;
[Field("name")]
public string CustomerName;
}
...
using (DataReader reader = ...)
{
List<CustomerDTO> customers = reader.AutoMap<CustomerDTO>()
.ToList();
}
(AutoMap()は拡張メソッドです)
@Stilgar さん、ありがとうございます。 素晴らしい コメント
もし が可能です。 を使用したほうがよいでしょう。 NHibernate、EF、Linq to Sqlなど。 しかし、古いプロジェクトでは(あるいは、「ここで発明されたものではない」、「ストアドプロックへの愛」など、他の(時には正当な)理由により)ORMを使用することが常に可能とは限らないので、より軽量のシステムを「袖の下」として持っていると役に立つことがある。
IDataReader のループをたくさん書く必要があった場合、コーディング (とエラー) を減らす利点がわかります。 アーキテクチャを変更することなく を減らすことができます。 それは、それが最初から良いアーキテクチャであると言っているわけではありませんが...。
CustomerDTOはデータアクセス層から出ず、複合オブジェクトなどはデータアクセス層がDTOオブジェクトを使って構築することを想定しているのですが、どうでしょうか?
この回答を書いてから数年後 ダッパー は.NETの世界に入り、それはあなたのAutoMapperを書くための非常に良い出発点である可能性があります。
関連
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] リスト<T>をランダム化する
-
[解決済み] C#で文字を繰り返し表示する最適な方法
-
[解決済み] メソッドの実行時間を計算する
-
[解決済み] C#でこの辞書のキーが存在するかどうかを検出するにはどうすればよいですか?
-
[解決済み】IEnumerable vs List - What to Use? どのように動作するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み] 関数を終了するには?
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】SqlDataReaderからカラム名を取得することは可能ですか?