Я использую 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; }
}