我已经尝试了一整天来解决这个问题,但是没有任何进展,所以希望有人之前解决过类似的问题。我找到的最接近解决方案是如何使用AutoMapper将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;
}
但我仍然收到相同的错误。任何帮助都将不胜感激!