2017-01-13 15 views
0

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()); 
 
            }

、私はUsersUserEditViewを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]プロパティを使用するとどうすればうまくできますか?

おかげ

+0

'あなたの財産に、それは私が知っているあなたのデータベースに –

+0

を作成しないで飾るには' [NotMapped]、それは問題がある...私はSaveChangesメソッドを実行すると、ConfirmPasswordはnullですが、ユーザーにエンティティが持っていると述べていますパスワードプロパティと一致する...そして私にはエラーが発生します。私の質問は、それがnullの場合、SaveChangesを実行するとどのようにエンティティの検証を省略できますか? – Diego

答えて

0

私は表記[NotMapped]と私のUsersエンティティに追加したプロパティConfirmPasswordていた問題。その場合、AutoMapper to Update Modifiedフィールドを実行すると問題が発生します。 Entity Validation ocurrsとConfirmPassowrdがnullであるため、検証時にSaveChanges();にエラーがありました。

は、私はそれが

context.Configuration.ValidateOnSaveEnabledを追加= falseを解決しました。

関連する問題