Błąd podczas mapowania na obiekt DTO

0

Podczas mapowania pojawia się poniższy błąd. Będę wdzięczny za pomoc.

AutoMapper.AutoMapperMappingException: Error mapping types.\r\n\r\nMapping types:\r\nCart -> CartDto\r\nMango.Services.ShoppingCartAPI.Models.Cart -> Mango.Services.ShoppingCartAPI.Models.DTOs.CartDto\r\n\r\nType Map configuration:\r\nCart -> CartDto\r\nMango.Services.ShoppingCartAPI.Models.Cart -> Mango.Services.ShoppingCartAPI.Models.DTOs.CartDto\r\n\r\nDestination Member:\r\nCartDetails\r\n\r\n ---> AutoMapper.AutoMapperMappingException: Error mapping types.\r\n\r\nMapping types:\r\nCartDetails -> CartDetailsDto\r\nMango.Services.ShoppingCartAPI.Models.CartDetails -> Mango.Services.ShoppingCartAPI.Models.DTOs.CartDetailsDto\r\n\r\nType Map configuration:\r\nCartDetails -> CartDetailsDto\r\nMango.Services.ShoppingCartAPI.Models.CartDetails -> Mango.Services.ShoppingCartAPI.Models.DTOs.CartDetailsDto\r\n\r\nDestination Member:\r\nProduct\r\n\r\n ---> AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.\r\n\r\nMapping types:\r\nProduct -> ProductDto\r\nMango.Services.ShoppingCartAPI.Models.Product -> Mango.Services.ShoppingCartAPI.Models.DTOs.ProductDto\r\n\r\nDestination Member:\r\nProduct\r\n\r\n   at lambda_method102(Closure , Product , ProductDto , ResolutionContext )\r\n   at lambda_method39(Closure , Object , CartDto , ResolutionContext )\r\n   --- End of inner exception stack trace ---\r\n   at lambda_method39(Closure , Object , CartDto , ResolutionContext )\r\n   --- End of inner exception stack trace ---\r\n   at lambda_method39(Closure , Object , CartDto , ResolutionContext )\r\n   at Mango.Services.ShoppingCartAPI.Repository.CartRepository.GetCartByUserId(String userId) in C:\\Users\\Kamil\\Desktop\\Kurs ASP NET Core\\tutorial z udemy 2\\MangoRestaurant\\Mango.Services.ShoppingCartAPI\\Repository\\CartRepository.cs:line 112\r\n   at Mango.Services.ShoppingCartAPI.Controllers.CartController.Checkout(CheckoutHeaderDto checkoutHeader) in C:\\Users\\Kamil\\Desktop\\Kurs ASP NET Core\\tutorial z udemy 2\\MangoRestaurant\\Mango.Services.ShoppingCartAPI\\Controllers\\CartController.cs:line 132"

Oto kod:

        public async Task<CartDto> GetCartByUserId(string userId)
        {
            Cart cart = new Cart();
            cart.CartHeader = await _dbContext.CartHeaders.FirstOrDefaultAsync(u => u.UserId == userId);
            cart.CartDetails = _dbContext.CartDetails.Where(u => u.CartHeader.CartHeaderId ==
            cart.CartHeader.CartHeaderId).Include(u => u.Product);

            return _mapper.Map<CartDto>(cart);
        }


    public class CartDto
    {
        public CartHeaderDto CartHeader { get; set; }
        public IEnumerable<CartDetailsDto> CartDetails { get; set; }
    }

    public class Cart
    {
        public CartHeader CartHeader { get; set; }
        public IEnumerable<CartDetails> CartDetails { get; set; }
    }


    public class MappingConfig
    {
        public static MapperConfiguration RegisterMaps()
        {
            var mappingConfig = new MapperConfiguration(config =>
            {
                config.CreateMap<ProductDto, Product>();
                config.CreateMap<CartHeader, CartHeaderDto>();
                config.CreateMap<CartDetails, CartDetailsDto>();
                config.CreateMap<Cart, CartDto>();
            });

            return mappingConfig;
        }
    }

w Program.cs:

IMapper mapper = MappingConfig.RegisterMaps().CreateMapper();
builder.Services.AddSingleton(mapper);
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
3

Missing type map configuration or unsupported mapping.\r\n\r\nMapping types:\r\nProduct -> ProductDto

Nie powinno być config.CreateMap<Product, ProductDto>() zamiast config.CreateMap<ProductDto, Product>()?

BTW: zgodnie z tym, co piszą na GitHubie, AddAutomapper() automatycznie rejestruje IMapper i ładuje profile z danych assemblies. Więc mieszasz trochę 2 różne podejścia do konfiguracji AutoMappera :)

0
nobody01 napisał(a):

Missing type map configuration or unsupported mapping.\r\n\r\nMapping types:\r\nProduct -> ProductDto

Nie powinno być config.CreateMap<Product, ProductDto>() zamiast config.CreateMap<ProductDto, Product>()?

BTW: zgodnie z tym, co piszą na GitHubie, AddAutomapper() automatycznie rejestruje IMapper i ładuje profile z danych assemblies. Więc mieszasz trochę 2 różne podejścia do konfiguracji AutoMappera :)

Zostawiłem w Porgram.cs samo AddAutomapper() i poprawiłem config.CreateMap<Product, ProductDto>() dalej ten sam błąd.

1

Jak zostawisz samo AddAutoMapper, to raczej nie zadziała, bo nigdzie nie masz klas dziedziczących po Profile, więc konfiguracja się nie zaczyta. Zostaw na razie to, co było wcześniej.

Pierwszy lepszy przykład: https://www.codementor.io/@zedotech/how-to-using-automapper-on-asp-net-core-3-0-via-dependencyinjection-zq497lzsq

1 użytkowników online, w tym zalogowanych: 0, gości: 1