使用asp.net mvc中的EF4动态更新数据

时间:2010-12-21 01:54:57

标签: asp.net-mvc asp.net-mvc-3 entity-framework razor

例如,我有一个名为[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个领域,我会因为这样做而疯狂:(

那么,我怎样才能将模型更新为数据库中的网页相关字段?

感谢

1 个答案:

答案 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();
}

实体框架只会更新实际更改的字段。

非常确定这就是你所需要的一切。