Automapper 无法正常工作
Automapper doesn't work as it should
我正在使用 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);
但是当 TEntity
是 Order
并且 TDto
是 OrderDto
时,我得到一个异常:
Missing map from Order to OrderDTO. Create using
Mapper.CreateMap
我做错了什么?
您需要使用 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);
好的。我知道了:
而不是:
return ((IQueryable<TEntity>) property.GetValue(_db, null)).ProjectTo<TDto>(builder);
我应该写:
return ((IQueryable<TEntity>) property.GetValue(_db, null)).ProjectTo<TDto>(MapperConfig);
将配置对象本身传递到 ProjectTo。
我正在使用 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);
但是当 TEntity
是 Order
并且 TDto
是 OrderDto
时,我得到一个异常:
Missing map from Order to OrderDTO. Create using Mapper.CreateMap
我做错了什么?
您需要使用 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);
好的。我知道了: 而不是:
return ((IQueryable<TEntity>) property.GetValue(_db, null)).ProjectTo<TDto>(builder);
我应该写:
return ((IQueryable<TEntity>) property.GetValue(_db, null)).ProjectTo<TDto>(MapperConfig);
将配置对象本身传递到 ProjectTo。