1

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"
Berker
  • 11
  • 3

1 Answers1

0

you can use (ForAllOtherMembers(opts => opts.Ignore())) and you can read that post. AutoMapper: "Ignore the rest"?