2017-01-12 4 views
0

Im EF5とMVCを使用しています。 Automapperを使用してCreate Modelを作成してモデルを編集しています。なぜなら、編集では作成よりもプロパティが少なくて済むからです。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; } 
 
    }

、コラムCreationDatePasswordが、私はこれらのプロパティを必要としない私の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(); 
 
    }

しかし、私は私の編集モデルのCreationDatePassowordを定義しないと、そこには、私のユーザーモデルでnullにsettedされています。だから_db.SaveChanges();私は更新時にエラーが発生します。

Less PropertiesからOriginal Modelへのマッピングで、自分のデータベースにマップする必要があるプロパティをどのように維持できますか?

ありがとうございました

ありがとうございました!しかし、私はプロパティとしてとき、私MAPP

Mapper.Map<UserEditView, Users>(model.user, user); 

ユーザー... NotMappedされているように

[NotMapped] 
 
[Compare("Password")] 
 
public virtual string ConfirmPassword { get; set; }

を定義している欠けている何か...

があります。 ConfirmPasswordがnullです。

それは私に私が動作するために

user.ConfirmPassword=user.Password before _db.SaveChanges(); 

をしなければならない

_db.SaveChanges(); 

にエラーが発生します。

このようなことをすると汚れがあります。

[NotMapped]プロパティがある場合、どのようにマップすることができますか?

ありがとうもう一度

+1

.ForMember(X => x.Id、OPT => opt.Ignore()) –

+0

あなたが私の答えをチェックして、あなたのコードにしてみてくださいすることができ、それが動作した場合に罰金としてそれをマークしてください助けていないなら、私に知らせて答え。 –

+0

ありがとうございました!それは無視を使用して動作します....しかし、何かが動作しません。私は私の質問を更新しました...私は別のエラーがあります...ありがとう – Diego

答えて

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); 
関連する問題