将Automapper与抽象对象的集合一起使用

艾米

请看一下我正在尝试做的这个相当人为的示例。

一,数据库模型:

public class Report
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public ICollection<Worker> Workers { get; set; } 
}

public abstract class Worker
{
    public Guid Id { get; set; }
}

public class Fireman : Worker
{
    public string Station { get; set; }
}

public class Cleaner : Worker
{
    public string FavoriteSolvent { get; set; }
}

现在视图模型:

public class AddReportViewModel
{
    public string Name { get; set; }
    public List<AddFiremanViewModel> Firemen { get; set; }
    public List<AddCleanerViewModel> Cleaners { get; set; }
}

public class AddFiremanViewModel
{
    public string Station { get; set; }
}

public class AddCleanerViewModel
{
    public string FavoriteSolvent { get; set; }
}

最后是Automapper配置文件:

public class ReportProfile : Profile
{
    protected override void Configure()
    {
        CreateMap<AddReportViewModel, Report>();
        CreateMap<AddFiremanViewModel, Fireman>();
        CreateMap<AddCleanerViewModel, Cleaner>();
    }
}

我希望FiremenCleaners都填充Workers集合,这是一个ICollection<Worker>我希望这是有道理的。我怎样才能做到这一点?

帕特里克·斯蒂尔

您的视图模型不包含任何Id字段,因此我Ignore按照映射中的设置进行设置然后,我只是使用LINQ的Union子句将两个源列表组合为一个集合(在使用Automapper转换每个列表之后)。这是映射:

Mapper.CreateMap<AddReportViewModel, Report>()
    .ForMember(d => d.Id, o => o.Ignore())
    .ForMember(d => d.Workers, o => o.MapFrom(
        s => Mapper.Map<ICollection<AddFiremanViewModel>, ICollection<Fireman>>(s.Firemen)
            .Union<Worker>(Mapper.Map<ICollection<AddCleanerViewModel>, ICollection<Cleaner>>(s.Cleaners))))
    ;
Mapper.CreateMap<AddFiremanViewModel, Fireman>()
    .ForMember(d => d.Id, o => o.Ignore())
    ;
Mapper.CreateMap<AddCleanerViewModel, Cleaner>()
    .ForMember(d => d.Id, o => o.Ignore())
    ;

这是一个使用它的示例:

var vm = new AddReportViewModel
{
    Name = "Sample",
    Cleaners = new List<AddCleanerViewModel>
    {
        new AddCleanerViewModel {FavoriteSolvent = "Alcohol"}
    },
    Firemen = new List<AddFiremanViewModel>
    {
        new AddFiremanViewModel {Station = "51"},
        new AddFiremanViewModel {Station = "49"}
    }
};

var db = Mapper.Map<AddReportViewModel, Report>(vm);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将表函数与长度为2的输入集合一起使用?

将下划线模板与Backbone集合一起使用

将泛型与实现相同接口的枚举类集合一起使用

将React.memo与映射集合一起使用

将all_of与lambda函数集合一起使用?

如何将Slick.io轮播与流星和集合一起使用?

将全局映射变量与 BaseX 集合一起使用

Firebase Firestore:将 .where() 与子集合一起使用

FluentValidation可以与嵌套集合一起使用吗?

将$ graphLookup结果与其他集合一起加入

在Clojure中将'map'与不同大小的集合一起使用

与集合一起存储(x,y)坐标

流星将MongoDB集合与已存在的对象数组一起使用

将AutoMapper与Data Reader一起使用

如何将AutoMapper与PagedList一起使用?

将AutoMapper与异步方法一起使用时出错

将ToListAsync()与Automapper ProjectToQueryable()一起使用

我可以将 AutoMapper 与 Blazor 一起使用吗?

如何将dplyr的管道与聚合一起使用

toObjectId用于将字符串的字段与查找和聚合一起使用

将dcast.data.table与日期值和聚合一起使用

我可以将string_split与标签的强制组合一起使用吗?

将makeObjectsPerformSelector与对象一起使用

将MEF与抽象基类一起使用

将wicket CompoundPropertyModel与抽象类一起使用

将策略设计模式与抽象参数一起使用

如何将MediatorLiveData与抽象源一起使用

在GSON中反序列化对象的JSON集合(可能与另一个集合一起)

无法将AutoMapper 4.2与Autofac一起使用来解析AutoMapper.IMapper