使用 Automapper 更新具有较少属性的现有实体

Using Automapper to update an existing Entity with less Properties

我正在使用 EF5 和 MVC。我正在使用 Automapper 将创建模型映射到编辑模型。因为我在 Edit 中需要的属性比在 Create 中少。

假设这是我的 class 我与 EF 绑定了。

 public partial class Users
        {
            public long User_id { get; set; }
            [Required]
            [StringLength(30, ErrorMessage = "LastName cannot be longer than 30 characters.")]
            public string LastName { get; set; }
            [Required]
            [StringLength(30, ErrorMessage = "Name cannot be longer than 30 characters.")]
            public string Name { get; set; }
            public string Password { get; set; }
            public System.DateTime CreationDate { get; set; }

   [NotMapped] // Does not effect with your database
    [RegularExpression(@"^.{5,}$", ErrorMessage = "Minimum 3 characters required")]
    [StringLength(9, MinimumLength = 3, ErrorMessage = "Confirm Password cannot be longer than 9 characters.")]
    [Compare("Password")]
    public virtual string ConfirmPassword { get; set; }
    }

在我的数据库 table 中,列 CreationDatePassword 是必需的

在我的 UserEditMode 模型中我不需要这些属性。

  public class UserEditView
        {public long User_id { get; set; }
            [Required]
            [StringLength(30, ErrorMessage = "LastName cannot be longer than 30 characters.")]
            public string LastName { get; set; }
            [Required]
            [StringLength(30, ErrorMessage = "Name cannot be longer than 30 characters.")]
            public string Name { get; set; }
    }

当我更新 table 时,我做了一个从 UserEditView 到用户模型的映射器。

  public async Task<ActionResult> Edit(UserEditViewModel model, System.Web.HttpPostedFileBase image = null)
{
    var user = _db.Users.FirstOrDefault(p => p.User_id == model.user.User_id);
      Mapper.Map<UserEditView, Users>(model.user, user);
     _db.SaveChanges();
    }

但是,由于我没有为我的编辑模型定义 CreationDatePassoword,因此在我的用户模型中它们被设置为 null。所以 _db.SaveChanges(); 给我更新错误。

我如何从 Less Properties 映射到原始模型并维护映射到我的数据库所需的那些属性?

谢谢

成功了谢谢!!!但是少了点什么...

我定义为属性

 [NotMapped]
 [Compare("Password")]
 public virtual string ConfirmPassword { get; set; }

与 NotMapped 一样...当我 Mapp

 Mapper.Map<UserEditView, Users>(model.user, user);

user.ConfirmPassword is null.

它在

上给我一个错误
 _db.SaveChanges();

我必须做

user.ConfirmPassword=user.Password before  _db.SaveChanges();

为了工作。

做这样的事情很脏。

当存在 [NotMapped] 属性 时如何映射?

再次感谢

在配置映​​射时使用类似的东西。

 .ForMember(x => x.Id, opt => opt.Ignore())

    For example 
     Mapper.CreateMap<ClassA, ClassB>()
    .Ignore(record => record.Field)
    .Ignore(record => record.AnotherField)
    .Ignore(record => record.Etc);