首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoMapper泛型映射

AutoMapper泛型映射
EN

Stack Overflow用户
提问于 2015-04-01 08:41:18
回答 2查看 26.3K关注 0票数 25

我在Stack Overflow上搜索了一下,用谷歌搜索了一下,但我找不到任何关于这方面的帮助或建议。

我有一个如下所示的类,它创建一个PagedList对象,并使用AutoMappper将类型从源映射到目标。

代码语言:javascript
复制
public class PagedList<TSrc, TDest>
{
    protected readonly List<TDest> _items = new List<TDest>();

    public IEnumerable<TDest> Items {
        get { return this._items; }
    }
}

我想为这种类型创建一个Map,将其转换为另一种类型,如下所示

代码语言:javascript
复制
public class PagedListViewModel<TDest>
{
    public IEnumerable<TDest> Items { get; set; }
}

我已经尝试过

代码语言:javascript
复制
Mapper.CreateMap<PagedList<TSrc, TDest>, PagedListViewModel<TDest>>();

但是编译器会因为TSrcTDest而抱怨

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-01 08:46:28

根据the AutoMapper wiki的说法

代码语言:javascript
复制
public class Source<T> {
    public T Value { get; set; }
}

public class Destination<T> {
    public T Value { get; set; }
}

// Create the mapping
Mapper.CreateMap(typeof(Source<>), typeof(Destination<>));

在您的情况下,这将是

代码语言:javascript
复制
Mapper.CreateMap(typeof(PagedList<,>), typeof(PagedListViewModel<>));
票数 53
EN

Stack Overflow用户

发布于 2016-10-08 16:19:35

这是一个最佳实践:

第一步:创建泛型类。

代码语言:javascript
复制
public class AutoMapperGenericsHelper<TSource, TDestination>
{
    public static TDestination ConvertToDBEntity(TSource model)
    {
        Mapper.CreateMap<TSource, TDestination>();
        return Mapper.Map<TSource, TDestination>(model);
    }
}

第二步:使用它

代码语言:javascript
复制
[HttpPost]
public HttpResponseMessage Insert(LookupViewModel model)
{
    try
    {
        EducationLookup result = AutoMapperGenericsHelper<LookupViewModel, EducationLookup>.ConvertToDBEntity(model);
        this.Uow.EducationLookups.Add(result);
        Uow.Commit(User.Id);
        return Request.CreateResponse(HttpStatusCode.OK, result);
    }
    catch (DbEntityValidationException e)
    {
        return Request.CreateResponse(HttpStatusCode.InternalServerError, CustomExceptionHandler.HandleDbEntityValidationException(e));
    }
    catch (Exception ex)
    {
        return Request.CreateResponse(HttpStatusCode.BadRequest, ex.HResult.HandleCustomeErrorMessage(ex.Message));
    }

}
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29380976

复制
相关文章

相似问题

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