2010-04-26 46 views
5

Lần đầu tiên sử dụng AutoMapper và tôi đang gặp khó khăn trong việc tìm hiểu cách sử dụng nó. Tôi đang cố gắng ánh xạ một ViewModel tới các Bảng Cơ sở dữ liệu của mình.Làm thế nào để sử dụng AutoMapper?

My ViewModel trông như thế này ...

public class AddressEditViewModel 
{ 
    public AddressEdit GetOneAddressByDistrictGuid { get; private set; } 
    public IEnumerable<ZipCodeFind> GetZipCodes { get; private set; } 

    public AddressEditViewModel(AddressEdit editAddress, IEnumerable<ZipCodeFind> Zips) 
    { 
     this.GetOneAddressByDistrictGuid = editAddress; 
     this.GetZipCodes = Zips; 
    } 
} 

Các Mapping Tôi đang cố gắng để sử dụng là ...

CreateMap<Address, AddressEditViewModel>(); 

Khi tôi chạy thử nghiệm này ...

public void Should_map_dtos() 
{ 
    AutoMapperConfiguration.Configure(); 
    Mapper.AssertConfigurationIsValid(); 
} 

Tôi gặp lỗi này ...

AutoMapper.AutoMapperConfigurationException: 2 thuộc tính sau trên JCIMS_MVC2.DomainModel.ViewModels.AddressEditViewModel không ánh xạ: GetOneAddressByDistrictGuid GetZipCodes Thêm một biểu hiện lập bản đồ tùy chỉnh, bỏ qua, hoặc đổi tên tài sản trên JCIMS_MVC2.DomainModel.Address.

Tôi không chắc chắn cách thức tôi phải vẽ bản đồ cho 2 thuộc tính đó. Tôi sẽ đánh giá cao bất kỳ hướng nào. Cảm ơn

Đánh dấu

+0

Vui lòng gắn thẻ bằng ngôn ngữ lập trình. – doublep

+0

Vài điều. Đầu tiên, AutoMapper mong đợi các ctor không có arg trên kiểu đích. Tiếp theo, bạn có thể đăng Địa chỉ trông như thế nào không? –

+0

Địa chỉ một lớp LINQ to SQL được tạo tự động được tạo khi tôi bỏ bảng trên thiết kế ... Đó là một lớp khá lớn ... có bao nhiêu nó muốn xem? -MARK- –

Trả lời

6

Ok nên tôi có thể thấy một vài điều bạn đang làm có thể sẽ không hữu ích.

Trước tiên, AutoMapper này được sử dụng để sao chép Thuộc tính trong một đối tượng vào Thuộc tính trong đối tượng khác. Trên đường đi, nó có thể thẩm vấn hoặc điều khiển chúng để có được viewmodel kết quả cuối cùng trong trạng thái chính xác.

  1. Thuộc tính có tên 'Get ...' nghe giống như một phương pháp đối với tôi.
  2. Các bộ định cư trên các thuộc tính của bạn là riêng tư nên AutoSetter sẽ không thể tìm thấy chúng. Thay đổi chúng thành nội bộ tối thiểu.
  3. Sử dụng hàm khởi tạo tham số không còn cần thiết khi bạn sử dụng AutoMapper - khi bạn đang chuyển đổi trực tiếp từ một đối tượng này sang đối tượng khác. Các constructor parametised là có chủ yếu để hiển thị những gì được yêu cầu một cách rõ ràng bởi đối tượng này.

    CreateMap<Address, AddressEditViewModel>() 
         .ForMember(x => x.GetOneAddressByDistrictGuid , 
              o => o.MapFrom(m => m."GetOneAddressByDistrictGuid")) 
         .ForMember(x => x.GetZipCodes, 
              o => o.MapFrom(m => m."GetZipCodes")); 
    

gì Automapper là thực sự tốt cho được sao chép từ DataObjects thành các đối tượng POCO, hoặc các vật Xem Mẫu.

public class AddressViewModel 
    { 
       public string FullAddress{get;set;} 
    } 

    public class Address 
    { 
       public string Street{get;set;} 
       public string Suburb{get;set;}   
       public string City{get;set;} 
    } 

    CreateMap<Address, AddressViewModel>() 
      .ForMember(x => x.FullAddress, 
           o => o.MapFrom(m => String.Format("{0},{1},{2}"), m.Street, m.Suburb, m.City )); 

    Address address = new Address(){ 
     Street = "My Street"; 
     Suburb= "My Suburb"; 
     City= "My City"; 
    }; 

    AddressViewModel addressViewModel = Mapper.Map(address, Address, AddressViewModel); 
Các vấn đề liên quan