Vaibhav Jain
Vaibhav Jain

Reputation: 34407

Automapping Collections

I am using Automapper for mapping my domain model and DTO. When I map Mapper.Map<SiteDTO, SiteEntity> it works fine.

But when I use collections of the same entities, it doesn't map.

 Mapper.Map<Collection<SiteEntity>, Collection<SiteDTO>>(siteEntityCollection);

AS per Automapper Wiki, it says the lists implementing ICollection would be mapped, I am using Collection that implements ICollection, but automapper doesn't map it. Am I doing something wrong.

public class SiteEntity //SiteDTO has exactly the same properties, so I am not posting it here.
    {
        public int SiteID { get; set; }
        public string Code { get; set; }
        public string Name { get; set; }
        public byte Status { get; set; }
        public int ModifiedBy { get; set; }
        public DateTime ModifiedDate{ get; set; }
        public long TimeStamp{ get; set; }
        public string Description{ get; set; }
        public string Notes{ get; set; }
        public ObservableCollection<AreaEntity> Areas{ get; set; }
        public void SiteEntity()
         {
           Areas=new ObservableCollection<AreaEntity>();
         }
     }

EDIT: SiteEntity updated to include the constructor.

Upvotes: 1

Views: 2721

Answers (2)

Shiraz Bhaiji
Shiraz Bhaiji

Reputation: 65411

Based on the code you posted Automapper will fail to map because you do not have a default constructor for SiteEntity that creates a new ObservableCollection Areas.

Since this is not there you will get a null reference exception when it trys to map Areas.

Upvotes: 0

Yusubov
Yusubov

Reputation: 5843

I have been using IList<> without any problems. I would check the mapping of child domain models first. Most probably they are not set yet. In your example: mapping of AreaEntity -> AreaEntityDto.

Mapper.Map<AreaEntity, AreaEntityDto>

Code example from wiki:

Mapper.CreateMap<ParentSource, ParentDestination>()
    .Include<ChildSource, ChildDestination>();
Mapper.CreateMap<ChildSource, ChildDestination>();

Upvotes: 1

Related Questions