, country , . AutoMapper, :
AutoMapper.Mapper.Map(countryDTO, country);
AutoMapper - IColletion<City> ( ) country.Cities.
, EntityFramework , .
, EF . AutoMapper, :
public class MyProfile : Profile
{
protected override void Configure()
{
Mapper.CreateMap<CountryData, Country>()
.ForMember(d => d.Cities, opt => opt.Ignore())
.AfterMap(AddOrUpdateCities);
}
private void AddOrUpdateCities(CountryData dto, Country country)
{
foreach (var cityDTO in dto.Cities)
{
if (cityDTO.Id == 0)
{
country.Cities.Add(Mapper.Map<City>(cityDTO));
}
else
{
Mapper.Map(cityDTO, country.Cities.SingleOrDefault(c => c.Id == cityDTO.Id));
}
}
}
}
Ignore() Cities AutoMapper , EntityFramework.
AfterMap() , , :
- DTO Entity (AutoMapper ) .
Map , - , automapper .
:
using (var context = new Context())
{
var countryDTO = context.Countries.FirstOrDefault(x => x.Id == 1).ToDTO<CountryData>();
countryDTO.Cities.Add(new CityData
{
CountryId = countryDTO.Id,
Name = "new city",
Population = 100000
});
countryDTO.Cities.FirstOrDefault(x => x.Id == 4).Name = "another name";
var country = context.Countries.FirstOrDefault(x => x.Id == 1);
AutoMapper.Mapper.Map(countryDTO, country);
context.SaveChanges();
}