繁体   English   中英

在ASP.NET MVC中使用EF4动态更新数据

[英]dynamic update the data using EF4 in asp.net mvc

例如,我有一个名为[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个字段,我会为此而疯狂:(

那么,如何仅将模型更新到网页中相关字段的数据库?

谢谢

您绝对应该研究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();
}

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

可以肯定,这就是您所需要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM