使用 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 中,列 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; }
}
当我更新 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();
}
但是,由于我没有为我的编辑模型定义 CreationDate
和 Passoword
,因此在我的用户模型中它们被设置为 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);
我正在使用 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 中,列 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; }
}
当我更新 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();
}
但是,由于我没有为我的编辑模型定义 CreationDate
和 Passoword
,因此在我的用户模型中它们被设置为 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);