如何解决 AutoMapper 错误? (堆栈溢出异常!)

2024-04-20

我在用自动映射器 http://automapper.codeplex.com+ EF(实体 => POCO)用于以下类:

public class Category
{
    public int CategoryID { get; set; }

    public string Name { get; set; }

    public Category Parent { get; set; }

    public IList<Category> Children { get; set; }
}

由于这个类与它自身(Parent/Children)有关系,AutoMapper 就疯了,抛出了一个 Stackoverflow 异常。你们中有人遇到过这个问题吗?


我通过创建自定义值解析器解决了这个问题。这不是一件美妙的事情,但它确实有效。

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;
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决 AutoMapper 错误? (堆栈溢出异常!) 的相关文章

随机推荐

  • 为什么要把Reader的构造函数参数定义为函数呢?

    在学习Reader Monad时 我发现它的定义是 newtype Reader r a Reader runReader r gt a instance Monad Reader r where return a Reader gt a
  • Express js:将多个路由文件合并为单个文件

    在我的express js应用程序中 我按以下方式组织我的路线 paths comment js 处理所有评论路由 var express require express var router express Router var comm
  • 将 DAO 记录集转换为断开连接的 ADO 记录集 dbDecimal 问题

    在 MS Access VBA 2007 中 我编写了以下函数 将 DAO 记录集转换为断开连接的内存中 ADO 记录集 问题是我在 DAO dbDecimal 字段上遇到数据类型转换问题 当我尝试将 DAO 记录集中的数据插入到新创建的
  • 使用 geom_smooth() 和“gam”相当于 span

    这可能是一个非常基本的问题 但我还没有找到答案 有没有相当于span论据中的geom smooth函数时method gam 我对 GAM 不太熟悉 所以如果有任何意见 我将不胜感激 我想为 n gt 1 000 的数据添加更灵活 更摆动
  • 声明图像字段的正确方法,sqlalchemy

    我正在尝试使用 Flask 构建和应用程序 我看过一些教程和书籍以及一些代码 1 它们解释了如何为数据库设置声明整数和字符串 然而 他们没有解释如何存储图像 我现在很困惑 虽然存储图像的自然方法是在数据库中 但阅读 Flask 站点上的一些
  • .NET 中机器的域名?

    一定有一种简单的方法可以做到这一点 我不敢相信没有 我扫描了网络 发现有 20 种不同的方法来查找当前用户所在的域 但没有一种方法可以获取当前计算机的域 或工作组 在非托管 c 中 这是通过以下方式检索的 WKSTA INFO 100 bu
  • Python CSV 模块 - 引号丢失

    我有一个 CSV 文件 其中包含这样的数据 15 I 2 41301888 BYRNESS RAW BYRNESS VILLAGE NORTHUMBERLAND ENG 11 I 3 41350101 2 2935 2 2008 01 09
  • OpenCV:何时使用 GridAdaptedFeatureDetector?

    我正在尝试制作一个基于描述符的检测器 我正在使用 OpenCV 我发现有很多特征类型和描述符类型 以及匹配器类型 更多我还看到可以有诸如网格或金字塔之类的组合类型作为特征类型 我还没有找到对它们的很好的解释 除了金字塔 它说这很好 对于本质
  • 容器“Android 依赖项”引用不存在的库 appcompat_v7.jar”

    我知道这个问题已被问过很多次 但不幸的是找不到任何解决方案 所以这里是 The container Android Dependencies references non existing library C Users Zain ul a
  • 替代RelativeLayout中的weightSum?

    我有四个TextView我想要在水平线上均匀分布的项目 这意味着一行中的所有空间必须均匀地被TextView项目 像这样 以前 我使用 LinearLayout 来实现此目的 我将weightSum 设置为4 并将layout weight
  • 单个构建步骤的 TeamCity 构建日志

    当 teamcity 执行 MSBuild 步骤时 构建日志具有可折叠 可扩展的层次结构 我有一个很大的构建步骤 它运行一个 powershell 脚本 生成的构建日志很大 需要很长时间才能加载 有没有一种方法可以让 teamcity 将单
  • 使用python sklearn增量训练随机森林模型

    我使用下面的代码来保存随机森林模型 我正在使用 cPickle 保存训练后的模型 当我看到新数据时 我可以增量训练模型吗 目前 训练集大约有2年的数据 有没有办法再训练两年并将其 某种程度上 附加到现有保存的模型中 rf RandomFor
  • 如何在没有 SSRS 服务器的情况下使用报表查看器控件执行 .rdl 报表?

    我正在尝试设置一个网页 用户可以在其中选择要运行的 rdl 文件 它将打开报表查看器控件 ASPX 加载报表定义文件 运行它并显示报表 到目前为止 我发现 本地 报告只能接受来自代码的数据源 因此您必须手动执行数据库代码 这将很痛苦 因为报
  • 为什么这个简单的 C# 试用不起作用 [重复]

    这个问题在这里已经有答案了 这会产生条纹而不是点 为什么 我正在尝试绘制单个像素 还尝试了另一种方法 使用 fillrectangle 它也没有给出所需的结果 得到的是条形而不是点 protected override void OnPai
  • 如何在异步代码中处理 CPU 密集型任务

    我正在做一些需要异步方法的繁重处理 我的一个方法返回一个字典列表 在将其添加到另一个可等待对象之前需要对其进行大量处理 IE def cpu bound task here record some complicated preproces
  • ExoPlayer - 奇怪的阿拉伯语/波斯语字幕格式

    我正在尝试创建一个带字幕的视频播放器 除了一件事之外 一切都已设置并正常工作 我的阿拉伯语字幕没有正确显示 它们的符号和东西看起来很奇怪 像这样 这是我的带有字幕的 ExoPlayer 设置 Uri srt Uri parse http d
  • Exchange Web 服务:UseDefaultCredentials 属性

    这个微软页面 http msdn microsoft com en us library exchange ff597939 28v exchg 80 29 aspx表示通过将 UseDefaultCredentials 属性设置为 tru
  • 为方法创建 IObservable 的好方法是什么?

    比方说 我们有一堂课 public class Foo public string Do int param 我想创建一个可观察的值 这些值是由Do方法 一种方法是创建一个正在调用的事件Do并使用Observable FromEvent创建
  • 如何使用 Spring 注入键值属性文件?

    我有一个键值属性文件 其中包含错误代码及其错误消息 我想在应用程序启动时注入此文件 以便我可以在注入的属性上进行查找 而无需读取该文件 下面只是伪代码 里面有什么吗Spring可以创建这个设置吗 Value location classpa
  • 如何解决 AutoMapper 错误? (堆栈溢出异常!)

    我在用自动映射器 http automapper codeplex com EF 实体 gt POCO 用于以下类 public class Category public int CategoryID get set public str