例如,我有一个名为[User]的数据表,并使用EF4映射到User enetity:
Id, FullName, EmailAddress, Fax, Tel
在网页中,我只想更新下面的“EmailAddess”和“Fax”2属性:
@using (Html.BeginForm("Edit", "User"))
{
<label>Email Address:</label>
@Html.TextBox("EmailAddress")
<label>Fax:</label>
@Html.TextBox("Fax")
<input type="submit" value="Update" />
}
和控制器我为此做了:
public ActionResult Edit(User user) {
var _user = GetUsers().Where(a => a.Id == user.Id).SingleOrDefault();
_user.Fax = user.Fax;
_user.EmailAddress = user.EmailAddress;
context.SaveChanges();
}
是的,我更新并成功,但下次我还要更新“电话”,所以我需要更改这样的代码:
_user.Fax = user.Fax;
_user.EmailAddress = user.EmailAddress;
_user.Tel = user.Tel;
如果我有100个领域,我会因为这样做而疯狂:(
那么,我怎样才能将模型更新为数据库中的网页相关字段?
感谢
答案 0 :(得分:0)
您一定要查看AutoMapper(http://automapper.codeplex.com/)。
AutoMapper.Mapper.CreateMap(typeof(User), typeof(UserViewModel));
AutoMapper.Mapper.CreateMap<User, UserViewModel>()
.ForMember(d => d.Property1, f => f.MapFrom(s => s.Property1))
.ForMember(d => d.Property2, f => f.MapFrom(s => s.Property2))
.ForMember(d => d.Property3, f => f.MapFrom(s => s.Property3));
然后在您的编辑中,您可以执行以下操作
public ActionResult Edit(User user) {
var _user = GetUsers().Where(a => a.Id == user.Id).SingleOrDefault();
AutoMapper.Mapper.Map(user, _user);
context.SaveChanges();
}
实体框架只会更新实际更改的字段。
非常确定这就是你所需要的一切。