ユーザーが、FirstName、LastName、Email などのフィールドを含むプロファイル レコードを変更するとします。
変更されたフィールドごとに、変更は次のタイプのリストにキーと値のペアとして保存されます。
List<Tuple<string, object>>
このキーと値のペアのキーは、実際のテーブル列を表します。
レコードを更新しようとしている間、これを行う 1 つの方法を次に示します。
foreach (Tuple<string, object> field in changeList) {
if (field.Item1.equals("FirstName")) {
user.FirstName = field.Item2;
}
if (field.Item1.equals("Email")) {
user.Email = field.Item2;
}
...
}
db.SaveChanges()
これを達成するためのより良い方法がなければならないと考えています。
リフレクションを使用して、ユーザーの各プロパティを設定できると思います
foreach(tuple<string, object> field in changeList) {
user.GetType().InvokeMember(field.Item1,
BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
Type.DefaultBinder, user, field.Item2);
}
もっと良い方法はないかと考えています。おそらく、TryUpdateModel() メソッドも使用できる「var」オブジェクトを動的に作成できます。