多くのプロパティを持つビジネスオブジェクトがあるとします。 ORMツールを使用せずにプロパティを設定する最も簡単で最良の方法は何ですか?オブジェクトにプロパティを設定する最も簡単な方法は?
これは、オブジェクトが他の複雑なオブジェクトを含む場合について、このような
client.Name = (string)reader["Name"];
どのように、データリーダーオブジェクトからプロパティを設定することを意味?
提案がありますか?
多くのプロパティを持つビジネスオブジェクトがあるとします。 ORMツールを使用せずにプロパティを設定する最も簡単で最良の方法は何ですか?オブジェクトにプロパティを設定する最も簡単な方法は?
これは、オブジェクトが他の複雑なオブジェクトを含む場合について、このような
client.Name = (string)reader["Name"];
どのように、データリーダーオブジェクトからプロパティを設定することを意味?
提案がありますか?
シリアライゼーションおよび/またはリフレクションはオプションです。
さて、反射を使用して割り当てコードを生成することができます。
は、次の3つの異なるものを頼む:
彼らは同じではありません! 最も速い(実行時)はコンパイルされたコードです。つまり、プロパティを正しく設定するために通常のC#を記述します。これは反射を使用するより簡単ですが、それは遅いです。また、子プロパティをマッピングするためのメカニズムが必要です(また、リーダー間に1対1の対応がない場合は、通常のプロパティをマッピングすることもできます)。これは、おそらくメンバー(プロパティ/フィールド)のカスタム属性で最もよく解決されます。
スピード(反射以上)の妥協点として、Delegate.CreateDelegateを使用してプロパティ設定者にアクセスできますが、それは多くの作業です。おそらく別のオプションはHyperDescriptorです。これは反射的なアクセスを可能にするが、はるかに高速である。
ベスト? ORMツールなど既存のコードを使用する可能性があります。書き込みとデバッグが少なくて済みます。
まあ、私は速く、彼は実行するのが最速ではなく、書くのが最も速いと思った。 – Brann
Reflectionは、列名がプロパティ名に対応するオブジェクトと一致しないという問題を引き起こします。 – sduplooy
列名とプロパティ名の間のマッピングを指定しない限り、必要なものを達成することはできません。このようなマッピングを指定すると、カスタムORMを構築したり、既存のORMを使用したりすることができます。 – sangupta