使用Automapper以较少的属性

时间:2017-01-12 18:34:58

标签: asp.net-mvc entity-framework-5 automapper viewmodel

我正在使用EF5和MVC。我正在使用Automapper将Mapp创建模型编辑模型。因为我在编辑中比在创建中需要更少的属性。

假设这是我的类,我与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; }
    }

在我的数据库表中,需要列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; }
    }

当我更新我的表时,我从UserEditView到用户模型执行Mapper。

  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到Original Model mapp,维护Map to My database所需的属性?

感谢

感谢!!!但是有些东西不见了......

我已定义为属性

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

与NotMapped一样......当我Mapp

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

user.ConfirmPassword为空。

它给我一个错误

 _db.SaveChanges();

我必须做

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

为了工作。

这样的事情很脏。

如果有[NotMapped]属性,我怎么能用Mapp?

再次感谢

1 个答案:

答案 0 :(得分:2)

在配置映射时使用类似的内容。

 .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);