我正在使用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; }
}
在我的数据库表中,需要列CreationDate
和Password
在我的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();
}
但是,由于我没有为我的编辑模型定义CreationDate
和Passoword
,因此在我的用户模型中设置为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?
再次感谢
答案 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);