Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
C# Automapper无法映射两个实体_C#_.net_Automapper - Fatal编程技术网

C# Automapper无法映射两个实体

C# Automapper无法映射两个实体,c#,.net,automapper,C#,.net,Automapper,我试图使用Automapper映射两个实体——ProductPictureDTO和ProductPictureBDO,但我遇到了一个异常,我无法理解错误是什么 错误 缺少类型映射配置或不支持的映射 映射类型:ProductPictureDTO->Guid ERP.DTO.Products.ProductPictureDTO->System.Guid 目标路径:ProductPictureBDO public class ProductPictureBDO : IEntity<Product

我试图使用Automapper映射两个实体——ProductPictureDTO和ProductPictureBDO,但我遇到了一个异常,我无法理解错误是什么

错误

缺少类型映射配置或不支持的映射

映射类型:ProductPictureDTO->Guid ERP.DTO.Products.ProductPictureDTO->System.Guid

目标路径:ProductPictureBDO

public class ProductPictureBDO : IEntity<ProductPictureBDO>, IValidation
{
    public const string PICTURE_CONTENT_NOT_VALID_ERROR_MESSAGE = "Picture: the content of the picture is not valid";
    public const string ASSOCIATED_PRODUCT_NOT_VALID_ERROR_MESSAGE = "Picture: the picture is not associated to a product";

    public ProductPictureBDO(Guid id)
    {
        ProductPictureId = id;
    }

    public Guid ProductPictureId { get; private set; }

    public byte[] Image { get; set; }

    public bool Deleted { get; private set; }

    #region Navigation properties

    public virtual ProductBDO Product { get; set; }

    public Guid ProductId { get; set; }

}
源值:ERP.DTO.Products.ProductPictureDTO

[DataContract]
public class ProductPictureDTO
{
    [DataMember]
    public Guid ProductPictureId { get; private set; }

    [DataMember]
    public byte[] Image { get; set; }

    [DataMember]
    public Guid ProductId { get; set; }

    [DataMember]
    public virtual ProductDTO Product { get; set; }
}
在下面,您可以看到ProductPictureDTO

[DataContract]
public class ProductPictureDTO
{
    [DataMember]
    public Guid ProductPictureId { get; private set; }

    [DataMember]
    public byte[] Image { get; set; }

    [DataMember]
    public Guid ProductId { get; set; }

    [DataMember]
    public virtual ProductDTO Product { get; set; }
}
下面是ProductPictureBDO的属性

public class ProductPictureBDO : IEntity<ProductPictureBDO>, IValidation
{
    public const string PICTURE_CONTENT_NOT_VALID_ERROR_MESSAGE = "Picture: the content of the picture is not valid";
    public const string ASSOCIATED_PRODUCT_NOT_VALID_ERROR_MESSAGE = "Picture: the picture is not associated to a product";

    public ProductPictureBDO(Guid id)
    {
        ProductPictureId = id;
    }

    public Guid ProductPictureId { get; private set; }

    public byte[] Image { get; set; }

    public bool Deleted { get; private set; }

    #region Navigation properties

    public virtual ProductBDO Product { get; set; }

    public Guid ProductId { get; set; }

}
下面是尝试映射这两个实体的方法

public IEnumerable<IError> ValidateProductPicture(ProductPictureDTO picture)
{
    return _productsManager.ValidateProductPicture(ProductsMapper.Convert<ProductPictureDTO, ProductPictureBDO>(picture));
}
下面是负责映射的类

public static class ProductsMapper
{
    static ProductsMapper()
    {
        MapProductBDOToDTO();
        MapProductDTOToBDO();

        MapProductCategoryBDOToDTO();
        MapProductCategoryDTOToBDO();

        MapIvaBDOToDTO();
        MapIvaDTOToBDO();

        MapProductSupplierBDOToDTO();
        MapProductSupplierDTOToBDO();

        MapProductPictureBDOToDTO();
        MapProductPictureDTOToBDO();

        MapProductNoteBDOToDTO();
        MapProductNoteDTOToBDO();

        MapStockProductBDOToDTO();
        MapStockProductDTOToBDO();

        MapTagBDOToDTO();
        MapTagDTOToBDO();
    }


    public static TTargetType Convert<TToConvert, TTargetType>(TToConvert toConvert)
    {

        return Mapper.Map<TTargetType>(toConvert);
    }


    private static void MapProductDTOToBDO()
    {
        Mapper.CreateMap<ProductDTO, ProductBDO>();
    }

    private static void MapProductBDOToDTO()
    {
        Mapper.CreateMap<ProductDTO, ProductBDO>().ReverseMap();
    }

    private static void MapProductCategoryDTOToBDO()
    {
        Mapper.CreateMap<ProductCategoryDTO, ProductCategoryBDO>();
    }

    private static void MapProductCategoryBDOToDTO()
    {
        Mapper.CreateMap<ProductCategoryBDO, ProductCategoryDTO>();
    }

    private static void MapIvaDTOToBDO()
    {
        Mapper.CreateMap<IvaDTO, IvaBDO>();
    }

    private static void MapIvaBDOToDTO()
    {
        Mapper.CreateMap<IvaBDO, IvaDTO>();
    }

    private static void MapProductSupplierDTOToBDO()
    {
        Mapper.CreateMap<ProductSupplierDTO, ProductSupplierBDO>();
    }

    private static void MapProductSupplierBDOToDTO()
    {
        Mapper.CreateMap<ProductSupplierDTO, ProductSupplierBDO>().ReverseMap();
    }

    private static void MapProductPictureDTOToBDO()
    {
        Mapper.CreateMap<ProductPictureDTO, ProductPictureBDO>();
    }

    private static void MapProductPictureBDOToDTO()
    {
        Mapper.CreateMap<ProductPictureDTO, ProductPictureBDO>().ReverseMap();
    }

    private static void MapProductNoteDTOToBDO()
    {
        Mapper.CreateMap<ProductNoteDTO, ProductNoteBDO>();
    }

    private static void MapProductNoteBDOToDTO()
    {
        Mapper.CreateMap<ProductNoteDTO, ProductNoteBDO>().ReverseMap();
    }

    private static void MapStockProductDTOToBDO()
    {
        Mapper.CreateMap<StockProductDTO, StockProductBDO>();
    }

    private static void MapStockProductBDOToDTO()
    {
        Mapper.CreateMap<StockProductDTO, StockProductBDO>().ReverseMap();
    }

    private static void MapTagDTOToBDO()
    {
        Mapper.CreateMap<TagDTO, TagBDO>();
    }

    private static void MapTagBDOToDTO()
    {
        Mapper.CreateMap<TagDTO, TagBDO>().ReverseMap();
    }
}
我在ProductMapper类的Convert方法中遇到异常,请尝试:使用Mapper.DynamicMap而不是Mapper.Map
我冒着在这里落选的风险

问题可能是ProductPictureBDO上的构造函数,请参见此处以获取解决方案另一种解决方法是添加此构造函数公共ProductPictureBDO:thisGuid.Empty{},另一种解决方法是删除构造函数和私有集使其公开。我尝试添加默认构造函数,但无效。因此,问题不在于构造器。这会导致什么错误?你能发布完整的错误吗?谢谢你的回答,但实际上Autompper能够映射私有属性。它可以工作,但在我看来,这是在克服问题,而不是解决问题。你能解释什么是DynamicMap吗?你为什么建议它?据我所知,只有在编译时不知道类型时才应该使用DynamicMap:您不必创建各种映射。但这意味着,每次要映射类型时,都会动态执行映射,这是不高效的。我相信这是因为ProductsMaper中有多个CreateMap调用,理想情况下,在应用程序域中只能出现一次,这是您的竞争条件。当您将映射更改为动态映射时,它肯定会绕过所有配置。这是我根据半小时的研究所做的描述。首先,我不明白为什么CreateMap调用会有问题,因为它们都是不同的。其次,映射是在静态构造函数中创建的,根据定义,在会话期间只调用一次而不是多次。第三:虽然多次创建同一映射肯定是没有效率的,但我认为这不会导致异常