2011-01-11 38 views
13

Tại sao UseValue chỉ được thực hiện một lần? Tôi cần gọi cho TeamRepository cho mỗi yêu cầu.AutoMapper: Tại sao UseValue chỉ được thực thi sau khi

Tôi làm cách nào để đạt được điều này?

Mapping từ TeamEmployee để TeamEmployeeInput: đối tượng

CreateMap<TeamEmployee, TeamEmployeeInput>() 
    .ForMember(x => x.Teams, x => x.UseValue(GetTeamEmployeeInputs())) 
    .ForMember(d => d.SelectedTeam, s => s.MapFrom(x => x.Team == null ? 0 : x.Team.Id)); 

private IEnumerable<TeamDropDownInput> GetTeamEmployeeInputs() 
{ 
    Team[] teams = CreateDependency<ITeamRepository>().GetAll(); 
    return Mapper.Map<Team[], TeamDropDownInput[]>(teams); 
} 

Tên miền:

public class TeamEmployee : Entity 
{ 
    public virtual Employee Employee { get; set; } 
    public virtual Team Team { get; set; } 
} 

Xem mô hình đối tượng:

public class TeamEmployeeInput 
{ 
    public int? Id { get; set; } 
    public string EmployeeLastName { get; set; } 
    public string EmployeeEMail { get; set; } 
    public string EmployeeFirstName { get; set; } 

    public int SelectedTeam { get; set; } 

    public IList<TeamDropDownInput> Teams { get; set; } 
} 


public class TeamDropDownInput : IDropdownList 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
} 

Trả lời

21

Thử tùy chọn MapFrom. Nó cung cấp một đại biểu sẽ được gọi mỗi khi một bản đồ xảy ra. Từ một kiểm tra DateTime nhanh và cửa sổ lệnh của tôi, điều này dường như hoạt động.

Cái gì như:

public class Foo { 
    public DateTime bar { get; set; } 
} 

public class Foo1 
{ 
    public DateTime bar1 { get; set; } 
} 
Mapper.CreateMap<Foo, Foo1>() 
    .ForMember(x => x.bar1, opt => opt.MapFrom(x => DateTime.Now)); // not using x, your function returns the value for bar1 

tôi phải chỉ ra rằng đây không phải là cách AutoMapper được thiết kế để làm việc. AutoMapper sẽ ánh xạ các thuộc tính từ mô hình này sang mô hình khác. Vì vậy, nếu dữ liệu không tồn tại trên modelA, bạn không nên bản đồ dữ liệu đó là modelB.

thay đổi mã của bạn sẽ là:

CreateMap<TeamEmployee, TeamEmployeeInput>() 
    .ForMember(x => x.Teams, x => x.MapFrom(x => GetTeamEmployeeInputs())) 
+1

cảm ơn, tôi đã không nhận ra rằng điều này cũng có thể;) – Rookian

+1

@Rookian - chào mừng bạn! –

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