我经常有这样的模特和Dtos:
// DTO class
public class OrderDto
{
public int Id { get; set; }
public DateTime Date { get set; }
public int ProductId { get; set; }
// ...
}
// Model class
public class Order : BaseObject
{
public DateTime Date { get set; }
public Product Product { get; set; }
// ...
}
// Model class
public class Product : BaseObject
{
// ...
}
为了将我的OrderDto映射到Order类,我必须为这个特定的“关联”配置AutoMapper,如下所示:
CreateMap<OrderDto, Order>()
.ForMember(m => m.Product, d => d.ResolveUsing((d, m) =>
{
return m.Session.GetObjectByKey<Product>(dto.ProductId);
}))
对于这样的每个案例,这样做非常麻烦。因此,我正在考虑使用自定义TypeConverter类来概括此行为:
public class IntBaseObjectTypeConverter : ITypeConverter<int, BaseObject>
{
private UnitOfWork uow;
// ...
public BaseObjectConvert(int source, BaseObject destination, ResolutionContext context)
{
return uow.Session.GetObjectByKey(typeof(destination), source);
}
}
但是,如果目标为空,这当然会失败。不幸的是,ResolutionContext并没有给我任何关于目标属性的具体类型的线索。
现在我的问题是,如果有另一种方法可以通过AutoMapper实现我想做的事情吗?
请注意,我没有使用实体框架,当然可以在具有外键和导航属性的模型级别上解决此问题。我使用DevExpress的XPO,它不允许像实体框架那样使用外键和导航属性。