Users
... Users
にマップされているEntity
を定義しました。私は私のCreate
ビューを継承するために、このエンティティを使用[NotMapped]プロパティを使用してエンティティをマッピングする際のMVC Entity Frameworkエラー
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 int Country_id { get; set; }
public Nullable<int> State_id { get; set; }
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
public System.DateTime CreationDate { get; set; }
public Nullable<System.DateTime> UpDateTime { get; set; }
[RegularExpression(@"^.{5,}$", ErrorMessage = "Minimum 3 characters required")]
[Required]
[StringLength(9, MinimumLength = 3, ErrorMessage = "Password cannot be longer than 9 characters.")]
public string Password { get; set; }
public int Rol_id { get; set; }
public byte[] Picture { get; set; }
public string CodArea { get; set; }
public string PhoneNumber { get; set; }
public virtual Ages Ages { get; set; }
public virtual Countries Countries { 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; }
}
...私が更新すると
、私は、このプロパティの多くを必要としません。私はUserEditView
と呼ばれる新しいエンティティをこの定義で定義しました。私はパスワードとConfirmPasswordを持っていません。
public partial 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; }
public int Country_id { get; set; }
public Nullable<int> State_id { get; set; }
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
public System.DateTime CreationDate { get; set; }
public Nullable<System.DateTime> UpDateTime { get; set; }
[RegularExpression(@"^.{5,}$", ErrorMessage = "Minimum 3 characters required")]
[Required]
[StringLength(9, MinimumLength = 3, ErrorMessage = "Password cannot be longer than 9 characters.")]
public byte[] Picture { get; set; }
public string CodArea { get; set; }
public string PhoneNumber { get; set; }
}
私は私のグローバルasaxでMapper
を定義し、私は必要はありませドットこれらのプロパティを無視します。私が更新すると
cfg.CreateMap<Users, UserEditView>();
cfg.CreateMap<UserEditView, Users>()
.ForMember(x => x.CreationDate, opt => opt.Ignore())
.ForMember(x => x.Password, opt => opt.Ignore())
.ForMember(x => x.ConfirmPassword, opt => opt.Ignore())
.ForMember(x => x.Rol_id, opt => opt.Ignore());
}
、私はUsers
にUserEditView
をMAPPので、私はこのような_db.SaveChanges()
を呼び出すことができます。ユーザーで
public async Task<ActionResult> Edit(UserEditView model, System.Web.HttpPostedFileBase image = null)
{
try
{
if (!ModelState.IsValid)
{
return View(model);
}
model.user.UpDateTime = DateTime.Now;
model.user.IP = Request.UserHostAddress;
model.user.Url = UserValidation.EncriptacionURL(model.user.Email);
var user = _db.Users.FirstOrDefault(p => p.User_id == model.user.User_id);
if (user == null)
{
return View(model);
}
Mapper.Map<UserEditView, Users>(model.user, user);
_db.Entry(user).State = System.Data.Entity.EntityState.Modified;
_db.SaveChanges();
}
}
私はUsers
テーブルに持っているデータを持っています。したがって[NotMapped]
に設定されているため、ConfirmPassword
はnullです。 On _db.SaveChanges()
ConfirmPassword
がnullであるためエラーが発生します。したがって、Users
エンティティと比較すると、Password
プロパティと比較され、失敗しました。
nullがある[NotMapped]
プロパティを使用するとどうすればうまくできますか?
おかげ
'あなたの財産に、それは私が知っているあなたのデータベースに –
を作成しないで飾るには' [NotMapped]、それは問題がある...私はSaveChangesメソッドを実行すると、ConfirmPasswordはnullですが、ユーザーにエンティティが持っていると述べていますパスワードプロパティと一致する...そして私にはエラーが発生します。私の質問は、それがnullの場合、SaveChangesを実行するとどのようにエンティティの検証を省略できますか? – Diego