假设用户修改了包含 FirstName、LastName、Email 等字段的个人资料记录。
对于每个被修改的字段,更改都以键值对的形式存储在类型列表中:
List<Tuple<string, object>>
此键值对中的键代表实际的表列。
在尝试更新记录时,这是一种方法:
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);
}
我想知道是否有更好的方法。也许我可以动态构建一个“var”对象,它也可以让我使用 TryUpdateModel() 方法。