自动映射:仅更新表的几列

时间:2014-09-10 06:37:52

标签: c# asp.net-mvc orm telerik automapper

我在Telerik Open Access ORM中使用Automapper。 现在我的问题是我的表tblUser中有5列,如FirstnameLastnameUsernameEmailPassword。 现在,当admin创建新用户时,它会通过某些逻辑生成密码。

问题在于更新。目前,我在用户详细信息页面上显示密码字段,其中包含只读文本框。现在我不想显示密码字段。那么在更新时我是否会跳过密码字段?

我尝试了以下但是它将密码字段的错误抛出为空。

var map = AutoMapper.Mapper.CreateMap<UserDTO, TblUser>().ForSourceMember(x=>x.Password,y=>y.Ignore());
this.Update(entity);
this.Save();
return entity;

public void Update(T entity)
{
  dbContext.AttachCopy<U>(AutoMapper.Mapper.Map<U>(entity));
}

错误:

  

无法将值NULL插入列&#39;密码&#39;,表中   &#39; MyDatabase.dbo.tblUsers&#39 ;;列不允许空值。 UPDATE   失败。\ r \ n声明已经终止。

我不知道如何通过跳过某些字段来更新。

假设我在插入表单中有10列,在特定表中有更新形式的5列,所以在更新时我将其他5列作为隐藏字段以避免错误。但是现在我不想隐藏其他5个字段。不存在任何替代方案吗?

1 个答案:

答案 0 :(得分:1)

您需要映射到现有实体:

var entity = dbContext.TblUsers.Find<TblUser>(dto.Id);
Mapper.Map<UserDTO, TblUser>(dto, entity);
dbContext.SaveChanges();