将int(Id)映射到Model实例

时间:2018-06-07 08:01:13

标签: automapper

我经常有这样的模特和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,它不允许像实体框架那样使用外键和导航属性。

0 个答案:

没有答案