Я пытаюсь решить эту проблему в течение дня и не знаю, где, поэтому я надеюсь, что кто-то мог решить это раньше. Самым близким к решению, которое я нашел, было Как просто сопоставить NHibernate ISet с IList, используя AutoMapper и Сопоставить IList с ICollection через AutoMapper , но все равно не радость.
У меня есть объект данных, который выглядит следующим образом:
public class Parent
{
public virtual ISet<Child> Children {get; set; }
}
И бизнес-объект, который выглядит как:
public class ParentDto
{
public IList<ChildDto> Children {get; set; }
}
Использование AutoMapper для сопоставления данных с данными работает нормально:
...
Mapper.CreateMap<Parent, ParentDto>();
Mapper.CreateMap<Child, ChildDto>();
...
ParentDto destination = CWMapper.Map<Parent, ParentDto>(source);
Но когда я перехожу к отображению из бизнеса в данные, я получаю сообщение об ошибке:
...
Mapper.CreateMap<ParentDto, Parent>();
Mapper.CreateMap<ChildDto, Child>();
...
Parent destination = CWMapper.Map<ParentDto, Parent>(source);
Невозможно привести объект типа 'System.Collections.Generic.List' к '' Iesi.Collections.Generic.ISet '
Я добавил пользовательское сопоставление:
Mapper.CreateMap<ParentDto, Parent>()
.ForMember(m => m.Children, o => o.MapFrom(s => ToISet<ChildDto>(s.Children)));
private static ISet<T> ToISet<T>(IEnumerable<T> list)
{
Iesi.Collections.Generic.ISet<T> set = null;
if (list != null)
{
set = new Iesi.Collections.Generic.HashedSet<T>();
foreach (T item in list)
{
set.Add(item);
}
}
return set;
}
Но я все еще получаю ту же ошибку. Любая помощь будет значительно сокращена!