Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dns AutoMapper-如何将具体的域类映射到继承的目标DTO类?_Dns_Automapper_Dto - Fatal编程技术网

Dns AutoMapper-如何将具体的域类映射到继承的目标DTO类?

Dns AutoMapper-如何将具体的域类映射到继承的目标DTO类?,dns,automapper,dto,Dns,Automapper,Dto,我有一个平面域类,如下所示: 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; } } pu

我有一个平面域类,如下所示:

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; }
}
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; }
}
我有两个DTO类,如下所示:

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; }
}
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引入任何新的继承


谢谢

您可以像这样构建自己的自定义类型转换器

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

        return product;
    }
}
Mapper.CreateMap<ProductDomain, ProductDTO>().ConvertUsing<ProductDomainToProductDTOConverter>();
然后用自定义的TypeConverter创建一个映射,如下所示

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

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

您可以像这样构建自己的自定义类型转换器

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

        return product;
    }
}
Mapper.CreateMap<ProductDomain, ProductDTO>().ConvertUsing<ProductDomainToProductDTOConverter>();
然后用自定义的TypeConverter创建一个映射,如下所示

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

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

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