配置AutoMapper以将ICollection<DomainModel>映射到ICollection<ViewModel>再到ICollection<object>的最佳/最简单方法是什么
我有一个看起来像这样的DomainModel:
public class DomainModel
{
ICollection<EFEntity> Data;
//other stuff
}我想把这个DomainModel映射到一个MVC ViewModel:
public class ViewModelWithCollection
{
ICollection<object> Data;
//other stuff
}我需要ICollection<object>,因为我使用以下视图:
@model ViewModelWithCollection
<table>
@foreach(object x in Model.Data)
{
Html.Partial("PartialView", x)
}
</table>对于每个具体的ViewModel,都有一个如下所示的PartialView:
@model ViewModel
<tr> <!-- Render specific View Data --> <tr>当我使用
AutoMapper.Map<DomainModel, ViewModelWithCollection>(source, target);AutoMapper只做了这样的事情:
object target = (object)EFEntity这当然不会起作用。
发布于 2012-03-07 16:29:04
经过几个小时的搜索,我发现我想要实现的东西叫做映射继承:https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance
所以我的问题的解决方案是
AutoMapper.Map<DomainModel, ViewModelWithCollection>();
AutoMapper.Map<EFEntity, object>()
.Include<EFEntity, ViewModel>();
AutoMapper.Map<EFEntity, ViewModel>();发布于 2013-07-10 18:26:34
我似乎也遇到了同样的问题。
我有我的域模型:
public class Client
{
public int ClientId { get; set; }
public virtual ICollection<Contract> Contracts { get; set; }
}和我的视图模型:
public class ClientProfileViewModel
{
public int ClientId { get; set; }
public IEnumerable<ContractProfileViewModel> Contracts { get; set; }
}然后在我的映射中:
Mapper.CreateMap<Client, ClientProfileViewModel>()
.ForMember(c => c.Contracts, options => options.MapFrom(c => c.Contracts));
Mapper.CreateMap<ClientProfileViewModel, Client>()
.ForMember(c => c.Contracts, options => options.MapFrom(c => c.Contracts))https://stackoverflow.com/questions/9590980
复制相似问题