如果我有100个属性发生变化的对象怎么办?
这对代码来说太可怕了,而且容易遗漏一些属性。
更新记录的方法是否与手动方式不同?
ApplicationUser CurrentUser = db.Users.FirstOrDefault(x => x.Id == model.Id);
CurrentUser.FirstName = model.FirstName;
CurrentUser.LastName = model.LastName;
CurrentUser.IsRSM = model.IsRSM;
CurrentUser.PhoneNumber = model.PhoneNumber;
CurrentUser.Email = model.Email;
CurrentUser.UserName = model.Email;
CurrentUser.Region = model.Region;
CurrentUser.Active = model.Active;
db.Entry(CurrentUser).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
答案 0 :(得分:2)
根据评论,这里有两种方法可以以编程方式执行此操作:
var CurrentUser = db.Users.FirstOrDefault(x => x.Id == model.Id);
PropertyInfo[] sourceProps = model.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty);
PropertyInfo[] targetProps = CurrentUser.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty);
foreach (var prop in sourceProps)
{
var targetProp = targetProps.FirstOrDefault(x => x.Name == prop.Name);
if (targetProp != null)
targetProp.SetValue(CurrentUser, prop.GetValue(model));
}
db.Entry(CurrentUser).State = EntityState.Modified;
db.SaveChanges();
首先在应用程序启动时创建地图:
cfg.CreateMap<ApplicationUserViewModel, ApplicationUser>();
然后执行地图:
_mapper.Map<ApplicationUserViewModel, ApplicationUser>(model, CurrentUser)
答案 1 :(得分:0)
你可以这样做
ApplicationUser CurrentUser = db.Users.FirstOrDefault(x => x.Id == model.Id);
Context.Entry(CurrentUser).CurrentValues.SetValues(ObjectBeingPassed);
在你的方法中,你需要期待你的帖子中包含每个属性的记录(ObjectBeingPassed)。
答案 2 :(得分:-1)
有第三种方法可以做到这一点
通过测试,您将始终确保没有遗漏任何属性或将其设置为错误的值 通过测试,您可以重构您的方法最多使用自动映射的反射,您将始终&#34;检查&#34;属性映射正确。