Как я могу автоматически сопоставить несоответствие между двумя моделями с различным количеством полей? - PullRequest
0 голосов
/ 05 августа 2020

Я использую Visual Studio 2019 и. net core 3.1. У меня есть несколько связанных моделей, CustomerCountries и CustomerRegions в отношении один-ко-многим, т.е. 1 CustomerCountries имеет много CustomersRegions.

В представлениях регионов я хочу отображать названия стран, а не идентификатор, поэтому я создал ViewModel:

public class CustomerCountryRegionVM
    {
        public int IdCustomerRegion { get; set; }

        public string CustomerRegion { get; set; }

        public int IdCustomerCountry { get; set; }
        
        public string CustomerCountry { get; set; }
      
    }

Проблема в том, что модель регионов не имеет поля CustomerCountry, а имеет внешний первичный ключ IdCustomerCountry. Так что я не знаю, как делать сопоставление, я пробовал, но получаю несоответствие. В одном 4 поля, а в другом 3. Нужно ли делать скидку на модель просмотра? или есть другой вариант?

public class CustomerRegionsDto
        {
            public int IdCustomerRegion { get; set; }
            public string CustomerRegion { get; set; }
    
    
            [ForeignKey("CustomerCountryId")]
            public int IdCustomerCountry { get; set; }
            public CustomerCountriesDto CustomerCountryDto { get; set; }
    }
    
    public class CustomerRegions
        {
            [Key]
            public int IdCustomerRegion { get; set; }
    
            [StringLength(50, ErrorMessage = "Longitud máxima para la región: 50")]
            public string CustomerRegion { get; set; }
    
    
            [ForeignKey("IdCustomerCountry")]
            public int IdCustomerCountry { get; set; }
            public CustomerCountries CustomerCountry { get; set; }       
    
        }

Класс автоматического картирования

CreateMap<CustomerRegionsDto, CustomerRegions>();
                CreateMap<CustomerRegions, CustomerRegionsDto>();
    
                CreateMap<CustomerCountryRegionVM, CustomerRegions>();
                CreateMap<CustomerRegions, CustomerCountryRegionVM>();
    
                CreateMap<CustomerCountryRegionVM, CustomerCountryRegionDto>();
                CreateMap<CustomerCountryRegionDto, CustomerCountryRegionVM>();

В контроллере:

var model = _mapper.Map<CustomerCountryRegionVM, CustomerRegionsDto>(ccr);

Другая модель:

public class CustomerCountries
{
    
    public int IdCustomerCountry { get; set; }

    [StringLength(50, ErrorMessage = "Longitud máxima para el país: 50")]
    public string CustomerCountry { get; set; }

    public ICollection<CustomerRegions> CustomerRegions { get; set; }
}

1 Ответ

0 голосов
/ 06 августа 2020

Вы можете сопоставить конкретную собственность

 CreateMap<BusinessService.Model.PermitDashboard, BusinessService.Model.Permit>()
            .ForMember(x => x.PermitId, opt => opt.MapFrom(z => z.PermitId))
            .ForMember(x => x.PermitTitle, opt => opt.MapFrom(z => z.PermitTitle))
            .ForPath(x => x.PermitType.PermitTypeName, opt => opt.MapFrom(z => z.PermitType))
            .ForMember(x => x.EffectiveDt, opt => opt.MapFrom(z => z.EffectiveDt))
            .ForMember(x => x.ExpirationDt, opt => opt.MapFrom(z => z.ExpirationDt))
            .ReverseMap();
...