加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

如何使用AutoMapper将多个OBJECTS映射到一个对象 – asp.net mvc

发布时间:2020-12-16 00:08:39 所属栏目:asp.Net 来源:网络整理
导读:嗨全部/非常新的Auto-Mapper.我可以映射一对一的对象但是想知道是否可以将多个对象映射到一个对象或将多个对象映射到多个对象? 考虑我有以下情况…… 用户模型 public class User { public string FirstName { get; set; } public string LastName { get; s
嗨全部/非常新的Auto-Mapper.我可以映射一对一的对象但是想知道是否可以将多个对象映射到一个对象或将多个对象映射到多个对象?

考虑我有以下情况……

用户模型

public class User
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public Company Company { get; set; }  // 1 user work in 1 company
    }

公司模式

public class Company
        {
            public string CompanyName { get; set; }
            public string Website { get; set; }
            public ICollection<User> Users { get; set; }  // 1 Company can have many users
        }

UserCompanyViewModel

我想在一个视图中显示用户列表及其公司详细信息..

public class UserCompanyViewModel
            {
                 public ICollection<User> Users { get; set; }
                 ppublic ICollection<Company> Companies { get; set; }   
            }

现在,是否可以在这种情况下进行映射,如果是,我可以在一个视图中显示,在编辑该视图时,我想再次使用更新的字段映射回各自的模型.

任何帮助将不胜感激…… thx

解决方法

在这种情况下,您真的使用多种(类型)对象作为源吗?从您定义的问题看,您的来源是用户列表 – 通过“我想显示用户列表及其公司详细信息”来判断.

如果是这种情况,虽然您不能隐式地执行此操作,但您可以使用TypeConverter轻松地执行地图:

Mapper.CreateMap<ICollection<User>,UserCompanyViewModel>()
      .ConvertUsing<UserCompanyViewModelConverter>();

然后将您的转换器定义为:

public class UserCompanyViewModelConverter : ITypeConverter<ICollection<User>,UserCompanyViewModel>
{
    public UserCompanyViewModel Convert(ResolutionContext context)
    {
        UserCompanyViewModel model = new UserCompanyViewModel();

        ICollection<User> sourceUsers = (ICollection<User>)context.SourceValue;

        model.Users     = sourceUsers;
        model.Companies = sourceUsers.Select(u => u.Company).Distinct().ToList();

        return model;
    }
}

然后,当您想要映射时,只需将您的用户集合用于某些用户并映射它:

UserCompanyViewModel model = Mapper.Map<ICollection<User>,UserCompanyViewModel>(someUsers);

如果您确实需要将多个源类型映射到单个目标类型,则看起来this blog post包含一个可以帮助您的简短助手类.简而言之,AutoMapper并不完全支持这一点,因此您将制作几个Map请求来填充ViewModel.您将需要使用另一个TypeConverter来确保第二个调用不会替换第一个调用添加的公司.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读