1

我正在使用AutoMapper 4.2.1.0并且我已经将我的地图定义如下。

 var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Order, OrderDTO>();
            cfg.CreateMap<Order_Detail, Order_DetailDTO>();
        });
MapperConfig = config;

然后我MapperConfig在我的代码中使用来做到这一点:

var builder = MapperConfig.ExpressionBuilder;
return ((IQueryable<TEntity>) property.GetValue(_db, null)).ProjectTo<TDto>(builder);

但是什么时候TEntityOrder什么TDto时候OrderDto我得到一个例外,上面写着:

缺少从 Order 到 OrderDTO 的映射。使用 Mapper.CreateMap 创建

我做错什么了 ?

4

2 回答 2

2

好的。我明白了:而不是:

return ((IQueryable<TEntity>) property.GetValue(_db, null)).ProjectTo<TDto>(builder);

我应该写:

return ((IQueryable<TEntity>) property.GetValue(_db, null)).ProjectTo<TDto>(MapperConfig);

将配置对象本身传递给 ProjectTo。

于 2016-04-09T05:55:59.093 回答
1

您需要使用 MapperConfiguration 对象创建映射器。

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Order, OrderDTO>();
    cfg.CreateMap<Order_Detail, Order_DetailDTO>();
});

// Make sure mappings are properly configured (you can try-catch this).
config.AssertConfigurationIsValid();

// Create a mapper to use for auto mapping.
var mapper = config.CreateMapper();

var orderObject = new Order { /* stuff */ };
var orderDto = mapper.Map<OrderDTO>(orderObject);
于 2016-04-06T12:22:46.240 回答