如何解决AutoMapper错误? (stackoverflow异常!) [英] How to resolve AutoMapper error? (stackoverflow exception!)
本文介绍了如何解决AutoMapper错误? (stackoverflow异常!)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在为以下课程使用 AutoMapper + EF(Entities => POCO):
public class Category
{
public int CategoryID {get;组; }
public string Name {get;组; }
public Category Parent {get;组; }
public IList< Category>孩子{get;组;由于这个类与自己有关系(父/子),所以AutoMapper去了疯狂,并抛出一个Stackoverflow异常。有没有人遇到过这个问题?解决方案我已经通过创建CustomValueResolvers解决了。这不是美丽的事情,但它正在工作。
Mapper.CreateMap< Category,CategoryDTO>()
.ForMember(c => c.Parent,opt => opt.ResolveUsing< ParentResolver>())
.ForMember(c => c.Children,opt => opt.ResolveUsing< ChildrenResolver> ;());
Mapper.CreateMap< CategoryDTO,Category>()
.ForMember(c => c.Parent,opt => opt.ResolveUsing< ParentDTOResolver>())
.ForMember(c => c.Children,opt => opt.ResolveUsing< ChildrenDTOResolver>());
public class ParentResolver:ValueResolver< Category,CategoryDTO>
{
protected override CategoryDTO ResolveCore(Category category)
{
CategoryDTO dto = null;
if(category.Parent!= null)
dto = Mapper.Map< Category,CategoryDTO>(category.Parent);
return dto;
}
}
public class ParentDTOResolver:ValueResolver< CategoryDTO,Category>
{
protected override类别ResolveCore(CategoryDTO类别)
{
类别poco = null;
if(category.Parent!= null)
poco = Mapper.Map< CategoryDTO,Category>(category.Parent);
return poco;
}
}
public class ChildrenResolver:ValueResolver< Category,EntityCollection< CategoryDTO>>
{
protected override EntityCollection< CategoryDTO> ResolveCore(Category category)
{
EntityCollection< CategoryDTO> dtos = null;
if(category.Children!= null&& category.Children.Count> 0)
dtos = Mapper.Map< IList< Category>,EntityCollection< CategoryDTO>> (category.Children);
return dtos;
}
}
public class ChildrenDTOResolver:ValueResolver< CategoryDTO,IList< Category>>
{
protected override IList< Category> ResolveCore(CategoryDTO类别)
{
IList< Category> pocos = null;
if(category.Children!= null&& category.Children.Count> 0)
pocos = Mapper.Map< EntityCollection< CategoryDTO>,IList< Category> (category.Children);
return pocos;
}
}
I am using AutoMapper + EF (Entities => POCO) for the following class:
public class Category
{
public int CategoryID { get; set; }
public string Name { get; set; }
public Category Parent { get; set; }
public IList<Category> Children { get; set; }
}
Since this class has relationship with itself (Parent / Children), AutoMapper went crazy and threw a Stackoverflow exception. Have ever any of you experienced this problem?
解决方案 I've resolved it by creating CustomValueResolvers. It is not the beautiful thing to do, but it is working.
Mapper.CreateMap<Category, CategoryDTO>()
.ForMember(c => c.Parent, opt => opt.ResolveUsing<ParentResolver>())
.ForMember(c => c.Children, opt => opt.ResolveUsing<ChildrenResolver>());
Mapper.CreateMap<CategoryDTO, Category>()
.ForMember(c => c.Parent, opt => opt.ResolveUsing<ParentDTOResolver>())
.ForMember(c => c.Children, opt => opt.ResolveUsing<ChildrenDTOResolver>());
public class ParentResolver : ValueResolver<Category, CategoryDTO>
{
protected override CategoryDTO ResolveCore(Category category)
{
CategoryDTO dto = null;
if (category.Parent != null)
dto = Mapper.Map<Category, CategoryDTO>(category.Parent);
return dto;
}
}
public class ParentDTOResolver : ValueResolver<CategoryDTO, Category>
{
protected override Category ResolveCore(CategoryDTO category)
{
Category poco = null;
if (category.Parent != null)
poco = Mapper.Map<CategoryDTO, Category>(category.Parent);
return poco;
}
}
public class ChildrenResolver : ValueResolver<Category, EntityCollection<CategoryDTO>>
{
protected override EntityCollection<CategoryDTO> ResolveCore(Category category)
{
EntityCollection<CategoryDTO> dtos = null;
if (category.Children != null && category.Children.Count > 0)
dtos = Mapper.Map<IList<Category>, EntityCollection<CategoryDTO>>(category.Children);
return dtos;
}
}
public class ChildrenDTOResolver : ValueResolver<CategoryDTO, IList<Category>>
{
protected override IList<Category> ResolveCore(CategoryDTO category)
{
IList<Category> pocos = null;
if (category.Children != null && category.Children.Count > 0)
pocos = Mapper.Map<EntityCollection<CategoryDTO>, IList<Category>>(category.Children);
return pocos;
}
}
这篇关于如何解决AutoMapper错误? (stackoverflow异常!)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文