I am trying to update some data with some input by HttpPut which has an list of object. But specially I want to update child object's some properties.
Inputs
public class WarehouseInput
{
public string WarehouseCode { get; set; }
public string WarehouseName { get; set; }
public bool IsActive { get; set; }
public List<ItemInput> Items { get; set; }
}
public class ItemInput
{
public string ItemCode { get; set; }
public string ItemName { get; set; }
public bool IsActive { get; set; }
}
Entities
public class WarehouseEntity
{
public Guid Id { get; set; }
public Guid LocationId { get; set; }
public string WarehouseCode { get; set; }
public string WarehouseName { get; set; }
public bool IsActive { get; set; }
public DateTime CreateDate { get; set; }
public List<ItemEntity> Items { get; set; }
}
public class ItemEntity
{
public Guid Id { get; set; }
public string ItemCode { get; set; }
public string ItemName { get; set; }
public bool IsActive { get; set; }
public DateTime CreateDate { get; set; }
}
Swagger Request
{ "warehouseCode": "1234",
"warehouseName": "Test",
"isActive": true,
"items":
[
{ "id": "644eeb9c-2b65-49e2-93bd-5f770f5ce86f",
"itemCode": "10",
"itemName": "Book",
"isActive": false
},
{
"id": "2aeec639-64de-46b9-a30c-316ce2240764",
"itemCode": "11",
"itemName": "Pen",
"isActive": false
},
{
"id": "6e01f073-351f-4463-a4bb-a4a2a32dbf16",
"itemCode": "12",
"itemName": "Book",
"isActive": false
}
]
}
In DB these items' isActive datas are true. And I want to change them to false.
private readonly IMapper _mapper;
public async Task UpdateWarehouseAsync(Guid warehouseId, WarehouseInput input)
{
...
//Getting entity data
Warehouse warehouseEntity = await _warehouseRepository.GetWarehouseAsync(warehouseId);
//map
_mapper.Map(input, warehouseEntity);
}
MAPPING
public class WarehouseProfile : Profile
{
public WarehouseProfile()
{
CreateMap<WarehouseInput, WarehouseEntity>()
.ForMember(x => x.LocationId, opt => opt.Ignore())
.ForMember(x => x.CreateDate, opt => opt.Ignore());
CreateMap<ItemInput, ItemEntity>()
.ForMember(x => x.CreateDate, map => map.Ignore());
}
}
PROBLEM
I tried to ignore in map.Ignores for warehouse works normal but item's createDate becomes default value(01/01/0001 00:00:00) after mapping. Only the ones that I send to db with input change normally.
example output
"id": "644eeb9c-2b65-49e2-93bd-5f770f5ce86f",
"itemCode": "10",
"itemName": "Book",
"isActive": false,
"createDate": "01/01/0001 00:00:00"