C# 自动映射:为什么UseValue只执行一次

C# 自动映射:为什么UseValue只执行一次,c#,mapping,viewmodel,automapper,C#,Mapping,Viewmodel,Automapper,为什么UseValue只执行一次? 我需要为每个请求调用TeamRepository 我怎样才能做到这一点 从团队员工映射到团队员工输入: CreateMap<TeamEmployee, TeamEmployeeInput>() .ForMember(x => x.Teams, x => x.UseValue(GetTeamEmployeeInputs())) .ForMember(d => d.SelectedTeam, s => s.Map

为什么UseValue只执行一次? 我需要为每个请求调用TeamRepository

我怎样才能做到这一点

团队员工映射到团队员工输入:

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);
}
public class TeamEmployee : Entity
{
    public virtual Employee Employee { get; set; }
    public virtual Team Team { get; set; }
}
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; }
}
查看模型对象:

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);
}
public class TeamEmployee : Entity
{
    public virtual Employee Employee { get; set; }
    public virtual Team Team { get; set; }
}
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; }
}
公共类TeamEmployeeInput
{
公共int?Id{get;set;}
公共字符串EmployeeLastName{get;set;}
公共字符串EmployeeEMail{get;set;}
公共字符串EmployeeFirstName{get;set;}
public int SelectedTeam{get;set;}
公共IList团队{get;set;}
}
公共类TeamDropDownInput:IDropdownList
{
公共int Id{get;set;}
公共字符串文本{get;set;}
}

尝试
MapFrom
选项。它提供了一个委托,每次发生映射时都会调用该委托。从快速DateTime测试和我的命令窗口来看,这似乎是可行的

比如:

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