gpt4 book ai didi

c# - AutoMapper:为什么 UseValue 只执行一次

转载 作者:可可西里 更新时间:2023-11-01 07:43:55 30 4
gpt4 key购买 nike

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

我怎样才能做到这一点?

TeamEmployeeTeamEmployeeInput 的映射:

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

最佳答案

试试 MapFrom 选项。它提供了一个委托(delegate),每次发生 map 时都会调用该委托(delegate)。从快速 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

我必须指出这不是 AutoMapper 设计的工作方式。 AutoMapper 应该将属性从一个模型映射到另一个模型。因此,如果 modelA 上不存在数据,则不应将该数据映射modelB

您的代码更改为:

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

关于c# - AutoMapper:为什么 UseValue 只执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662863/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com