Im使用EF5和MVC。我正在使用Automapper将创建模型映射到编辑模型。因为我在"编辑"中需要的属性比在"创建"中少。
假设这是我的类,我与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到用户模型的映射器。
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();
上给了我更新的错误。
如何从较少属性映射到原始模型并维护映射到我的数据库所需的属性?
感谢
它起作用了,谢谢!!!。但是缺少了一些东西。。。
我已将定义为属性
[NotMapped]
[Compare("Password")]
public virtual string ConfirmPassword { get; set; }
按NotMapped。。。当我映射时
Mapper.Map<UserEditView, Users>(model.user, user);
user.ConfirmPassword为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);