2012-06-11 35 views
5

Tôi đang tạo ánh xạ Automapper giữa AccountEditViewModel (Xem Mô hình được sử dụng để chỉnh sửa người dùng) và User (Mô hình Dữ liệu đại diện cho Người dùng trong cơ sở dữ liệu). Nếu trường mật khẩu được điền vào, tôi muốn mã hóa mật khẩu đó và lưu trữ nó tuy nhiên nếu nó là null trong tôi muốn giữ mật khẩu cũ. Tôi đã thử các mã dưới đây tuy nhiên nó là sai, model.Ignore() không trả về một giá trị chuỗi. Cách tốt nhất để thực hiện điều này là gì. Tôi có thể thực hiện việc này bằng phương pháp ForMember() hay tôi cần trình giải quyết tùy chỉnh?C# Automapper Bỏ qua Thuộc tính Khi Null

Mapper.CreateMap<AccountEditViewModel, User>() 
       .ForMember(model => model.Password, model => model.MapFrom(user => user.Password != null ? EncryptPassword(user.Password) : model.Ignore())); 

Trả lời

8

Hãy thử điều này:

Mapper.CreateMap<AccountEditViewModel, User>() 
.ForMember(model => model.Password, model => model.Ignore()) 
.AfterMap((src, dst) => 
        { 
         if (src.Password != null) 
          dst.Password= EncryptPassword(src.Password); 

        }); 
+1

Bạn cần phải thêm một ForMember (mô hình => model.Password, mô hình => model.Ignore()) trước khi AfterMap() gọi mapper không còn xử lý ánh xạ –

+0

Điều này không hoạt động khi bạn sử dụng các biểu thức LINQ của trình tự động. – AgentFire

Các vấn đề liên quan