我试图让AutoMapper工作并且真的遇到了一个简单的任务。我有一个在用户实体中定义的复杂类型:
[ComplexType]
public class CustomerProfile
{
public string FirstName { get; set; }
public string LastName { get; set; }
// ...
}
public class User
{
public long Id {get; set;}
public string Email { get; get; }
public CustomerProfile CustomerProfile { get; set; }
}
我有这样的模型:
public class CustomerViewModel : CustomerProfile
{
public string Email { get; set; }
}
所以我只在视图模型和电子邮件中拥有所有CustomerProfile属性。
我想将User映射到CustomerViewModel。我尝试了一切,但实际上并没有成功。即使这段代码也不起作用:
Mapper.CreateMap<CustomerProfile, CustomerViewModel>();
Automapper只是拒绝映射任何内容。
如何映射?感谢。
答案 0 :(得分:2)
您可以使用.ConstructUsing
从CustomerViewModel
实例创建User
。然后,只要名称匹配,AutoMapper将自动映射其余属性(例如Email
):
Mapper.CreateMap<CustomerProfile, CustomerViewModel>();
Mapper.CreateMap<User, CustomerViewModel>()
.ConstructUsing(src => Mapper.Map<CustomerViewModel>(src.CustomerProfile));
示例: https://dotnetfiddle.net/RzpD4z
更新
要使AssertConfigurationIsValid()
通过,您需要忽略已手动映射的属性。您还需要忽略Email
→CustomerViewModel
映射中CustomerProfile
上的CustomerViewModel
属性,因为这将由User
→{{{{1}处理。 1}}映射:
CustomerViewModel