2011-01-11 25 views
13

¿Por qué UseValue solo se ejecuta una vez? Necesito llamar al TeamRepository para cada solicitud.AutoMapper: ¿Por qué UseValue solo se ejecuta una vez

¿Cómo puedo lograrlo?

Mapeo de TeamEmployee a TeamEmployeeInput: Objeto de

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

Dominio:

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

objetos Ver modelo:

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

Respuesta

21

Pruebe la opción MapFrom. Proporciona un delegado que se llamará cada vez que ocurra un mapa . Desde una prueba rápida de DateTime y mi ventana de comandos, esto parece funcionar.

Algo así como:

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 

tengo que señalar que esta no es la forma AutoMapper está diseñado para trabajar. AutoMapper debe mapear propiedades de un modelo a otro. Entonces, si los datos no existen en modelA, no debe map que los datos a modelB.

Su cambio de código sería:

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

gracias, no me di cuenta de que esto también sea posible;) – Rookian

+1

@Rookian - Bienvenido! –

Cuestiones relacionadas