これは私にとって少し新しいものです。私は、同じテーブルに2つのデータセットを読み込むETLプログラムを書くように求められました。データセット#1が完成し、テーブルのすべてのデータが含まれます。ただし、データセット#2には、の変更のみが含まれ、最初のデータセットにオーバーレイする必要があります。お守り:エンティティフレームワーク - nullでない値のみを更新します。
//データセット#1:ウィジェット表
+----+------+------+------+------+
| ID | COL1 | COL2 | COL3 | COL4 |
+----+------+------+------+------+
| 1 | abcd | abcd | abcd | abcd |
+----+------+------+------+------+
| 2 | abcd | abcd | abcd | abcd |
+----+------+------+------+------+
//データセット#2:Widgets_Changes表
+----+------+------+------+------+
| ID | COL1 | COL2 | COL3 | COL4 |
+----+------+------+------+------+
| 1 | | efgh | | ijkl |
+----+------+------+------+------+
| 2 | mnop | | qrst | |
+----+------+------+------+------+
//予想結果:すべての変更とウィジェット
+----+------+------+------+------+
| ID | COL1 | COL2 | COL3 | COL4 |
+----+------+------+------+------+
| 1 | abcd | efgj | abcd | ijkl |
+----+------+------+------+------+
| 2 | mnop | abcd | qrst | abcd |
+----+------+------+------+------+
私が避けようとしている明白なアプローチは、各ウィジェットを最初のテーブルから引き出して、プロパティ-bを実行することですY-プロパティの比較:
// Simplified example:
using (var db = new MyEntityDatabase()){
var widget = from p in db.Widgets select p where p.ID == 1;
var widget_diff = from p in db.Widgets_Changes select p where p.ID == 1
widget.COL1 = widget_diff.COL1 ?? widget.COL1;
widget.COL2 = widget_diff.COL2 ?? widget.COL2;
widget.COL3 = widget_diff.COL3 ?? widget.COL3;
// ...etc
db.saveChanges();
}
しかし、それはこの同じ方法論(差分データセットを伴う完全なデータセット)に付着するが、全く異なるスキーマを持って入ってくる複数のファイルで、この特定のデータセットで200以上のフィールドが、あります。明らかに、私はむしろ、私はちょうど各データセットのプロパティごとの比較をハードコードする代わりにファイルを実行することができますポータブルなものを持っているだろう。
両方のオブジェクトのプロパティを反復してnull値でない値を更新する方法はありますか?
これを行うには、PropertyInfoを使用してプロパティを取得することができます。 –