【问题标题】:AutoMapper - How to map a concrete domain class to an inherited destination DTO class?AutoMapper - 如何将具体域类映射到继承的目标 DTO 类?
【发布时间】:2010-12-13 11:31:45
【问题描述】:

我有一个像这样的平面域类:

public class ProductDomain
{
    public int ID { get; set; }

    public string Manufacturer { get; set; }

    public string Model { get; set; }

    public string Description { get; set; }

    public string Price { get; set; }
}

我有两个这样的 DTO 类:

public class ProductInfoDTO
{
    public int ID { get; set; }

    public string Manufacturer { get; set; }

    public string Model{ get; set; }
}

public class ProductDTO : ProductInfoDTO
{        
    public string Description { get; set; }

    public string Price { get; set; }
}

现在的问题是:

场景 #1:

Mapper.CreateMap<ProductDomain, ProductInfoDTO>() // this mapping works fine

场景 #2:

Mapper.CreateMap<ProductDomain, ProductDTO>() // this mapping is not working and throws System.TypeInitializationException

所以我的问题是如何在 ProductDomain 和 ProductDTO(继承 ProductInfoDTO)之间创建映射,而不破坏源类和目标类的定义。此外,我不想为域类 ProductDomain 引入任何新的继承。

谢谢

【问题讨论】:

  • 您的代码中一定有其他内容。我将上面的代码复制/粘贴到一个项目中,它运行得很好。我什至创建了一个示例 ProductDomain 对象,并将数据映射到 ProductDTO 没有任何问题。

标签: dns automapper dto


【解决方案1】:

您可以像这样构建自己的自定义 TypeConverter

public class ProductDomainToProductDTOConverter : ITypeConverter<ProductDomain, ProductDTO>
{
    public ProductDTO Convert(ProductDomain source)
    {
        ProductDTO product = new ProductDTO();
        product.Price = source.Price;
        ...

        return product;
    }
}

然后像这样使用您的自定义 TypeConverter 创建一个地图

Mapper.CreateMap<ProductDomain, ProductDTO>().ConvertUsing<ProductDomainToProductDTOConverter>();

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2019-03-03
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多