首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AutoMapper实现从ICollection<EFEntity>到ICollection<ViewModel>到ICollection<Object>的映射

使用AutoMapper实现从ICollection<EFEntity>到ICollection<ViewModel>到ICollection<Object>的映射
EN

Stack Overflow用户
提问于 2012-03-07 04:03:15
回答 2查看 1.7K关注 0票数 3

配置AutoMapper以将ICollection<DomainModel>映射到ICollection<ViewModel>再到ICollection<object>的最佳/最简单方法是什么

我有一个看起来像这样的DomainModel:

代码语言:javascript
复制
public class DomainModel
{
    ICollection<EFEntity> Data;

    //other stuff
}

我想把这个DomainModel映射到一个MVC ViewModel:

代码语言:javascript
复制
public class ViewModelWithCollection
{
    ICollection<object> Data;

    //other stuff
}

我需要ICollection<object>,因为我使用以下视图:

代码语言:javascript
复制
@model ViewModelWithCollection
<table>
    @foreach(object x in Model.Data)
    {
        Html.Partial("PartialView", x)
    }
</table>

对于每个具体的ViewModel,都有一个如下所示的PartialView:

代码语言:javascript
复制
@model ViewModel
<tr> <!-- Render specific View Data --> <tr>

当我使用

代码语言:javascript
复制
AutoMapper.Map<DomainModel, ViewModelWithCollection>(source, target);

AutoMapper只做了这样的事情:

代码语言:javascript
复制
object target = (object)EFEntity

这当然不会起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-07 16:29:04

经过几个小时的搜索,我发现我想要实现的东西叫做映射继承:https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance

所以我的问题的解决方案是

代码语言:javascript
复制
AutoMapper.Map<DomainModel, ViewModelWithCollection>();

AutoMapper.Map<EFEntity, object>()
    .Include<EFEntity, ViewModel>();

AutoMapper.Map<EFEntity, ViewModel>();
票数 3
EN

Stack Overflow用户

发布于 2013-07-10 18:26:34

我似乎也遇到了同样的问题。

我有我的域模型:

代码语言:javascript
复制
public class Client
{
 public int ClientId { get; set; }
 public virtual ICollection<Contract> Contracts { get; set; }
}

和我的视图模型:

代码语言:javascript
复制
public class ClientProfileViewModel
{
 public int ClientId { get; set; }
 public IEnumerable<ContractProfileViewModel> Contracts { get; set; }
}

然后在我的映射中:

代码语言:javascript
复制
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))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9590980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档