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

标签 c# mapping viewmodel automapper

为什么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/

相关文章:

vb.net - 在下拉列表中获取所有映射的网络驱动器

algorithm - 从循环索引 k,获得对 i,j 且 i < j?

mvvm - 如何将数据(选定项目)传递给 Durandal 组合详细 View ?

asp.net-mvc-3 - View 中的多个 ViewModel

c# - Telerik RadAsyncUpload 404 加载 Telerik.Web.UI.WebResource.axd

c# - Primary Interop Assemblies ( PIA ) 是否需要在机器上安装 Microsoft Office 才能工作

c# - 获取带有特殊大小写的字符串的前 140 个字符

c# - MvvmCross、UWP、MessengerPlugin : Failed to load Page

c# - NHibernate 转换问题(怀疑原因是不正确的映射)

c# - 将 View 模型与存储库模式结合使用