pat*_*anb 10 asp.net asp.net-mvc automapper asp.net-mvc-3
嗨全部/非常新的自动映射器.我可以映射一对一的对象但是想知道是否可以将多个对象映射到一个对象或将多个对象映射到多个对象?
考虑我有以下情况......
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Company Company { get; set; } // 1 user work in 1 company
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
我想在一个视图中显示用户列表及其公司详细信息..
public class UserCompanyViewModel
{
public ICollection<User> Users { get; set; }
ppublic ICollection<Company> Companies { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,是否可以在这种情况下进行映射,如果是,我可以在一个视图中显示,当编辑该视图时,我想再次将更新的字段映射回各自的模型.
任何帮助将不胜感激...... thx
Kas*_*aku 13
在这种情况下,您真的使用多种(类型)对象作为源吗?从您定义的问题看,您的来源是用户列表 - 通过"我想显示用户列表及其公司详细信息"来判断.
如果是这种情况,虽然您无法隐式TypeConverter地执行此操作,但您可以使用a 来轻松地执行地图:
Mapper.CreateMap<ICollection<User>, UserCompanyViewModel>()
.ConvertUsing<UserCompanyViewModelConverter>();
Run Code Online (Sandbox Code Playgroud)
然后将您的转换器定义为:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当您想要映射时,只需获取用户集合someUsers并映射它:
UserCompanyViewModel model = Mapper.Map<ICollection<User>, UserCompanyViewModel>(someUsers);
Run Code Online (Sandbox Code Playgroud)
如果您确实需要将多个源类型映射到单个目标类型,则此博客文章看起来包含一个可帮助您的简短助手类.简而言之,AutoMapper并不完全支持这一点,因此您将制作一些Map请求来填充ViewModel.您需要使用另一个TypeConverter来确保第二个呼叫不会替换第一个呼叫添加的公司.
| 归档时间: |
|
| 查看次数: |
10672 次 |
| 最近记录: |