问题标签 [automapper-2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
12776 浏览

c# - AutoMapper 和展平嵌套数组

我正在尝试使用 AutoMapper 来展平多个级别的数组。

考虑以下源类:

以及以下目的地:

我想做的是从一个或多个 X 中获取一个列表,例如:

我无法弄清楚要使用哪种映射配置来实现这一点。MapFrom 似乎是 1:1 组合的方式,但似乎无法处理数组(或其他可枚举),除非我使用 AutoMapper 的目标命名约定。

关于如何实现这一目标的任何见解?

0 投票
2 回答
1577 浏览

c# - 这是 AutoMapper 2.0.0 和 2.2.0 之间的重大变化吗?

我今天从 AutoMapper 2.0.0 更新到 2.2.0 并意识到更新破坏了一些代码。在作为问题发布在 automapper github 站点上之前,想在这里询问一下。

我的目标类型之一初始化集合属性,如下所示:

使用 automapper 2.0.0,这很好。当我更新到 2.2.0 时,映射到此目标类型会导致 NotSupportedException 并显示消息“集合具有固定大小”。(该异常被包装在 AutoMapperMappingException 中。)

我可以通过将上面的构造函数代码更改为此来解决这个问题:

似乎 AutoMapper 2.0.0 正在丢弃 Items 属性中的任何值并使用set属性访问器,而 AutoMapper 2.2.0 只是使用get属性访问器并尝试修改现有的 IEnumerable。看起来Enumerable.Empty<TModel>()只是替换一个长度为零的数组,这可以解释异常。

这是一个错误吗?AutoMapper 在 2.0.0 和 2.2.0 之间发生了什么变化,会导致它忽略目标属性设置器,而是尝试修改现有集合?

更新:

根据要求,这里是 CreateMap 调用:

该类PageOfEstablishmentApiModel继承自PageOf<EstablishmentApiModel>.

这是 Mapper.Map 代码:

如果 AutoMapper 从 2.0.0 到 2.2.0 需要特殊的映射配置(例如 .ConvertUsing(x => x)),我们可能不得不挂在旧版本上。我一直很喜欢 AM 如何自动转换集合属性,没有它,AM 看起来更像是 ValueInjecter。

0 投票
1 回答
2343 浏览

automapper - AutoMapperMappingException 映射类型:Double -> Double

当我尝试在我的应用程序中调用 Mapper.Map 时出现以下异常:

除了明显的错误表明它无法映射相同类型的对象(以及原始类型),事实是我从不从类型“Acme.Order”映射到类型“Acme.Address”!

这是正在使用的实际调用:

我的对象模型如下所示:

我在我的应用程序中定义了以下配置:

使用这些辅助方法:

(我在 IDataRecord 上有扩展方法,它们采用字段名称、获取序数并使用标准方法返回值,但为简洁起见不会显示它们。)

这是否能说明导致失败的原因?

(顺便说一句,我正在使用 AutoMapper v2.1.267)

0 投票
0 回答
831 浏览

asp.net-mvc - 如何使用 Automapper 正确映射?

我正在开发一个使用来自 Nuget 的 Automapper、工作单元、实体框架 5、ASPNET MVC 4、WebApi 和 Windsor Castle 的应用程序。

我不确定是否应该映射它或者它应该由 Automapper 自动映射

Uow.Stores.GetAll().OrderBy(s => s.Name)返回一个IOrderedQueryable<Store>.

我收到错误消息

无法将表达式类型 IOrderedQueryable 转换为类型 IEnumerable

我应该做一个 foreach 并将每个返回的对象转换GetAll为AutomapperStoreDto的方法吗?Mapper.MapAutomapper 不会为我转换它吗?

这就是我使用 Automapper 以及注册它的方式。请让我知道是否应该/可以改进。

AutomapperInstaller.cs

WebWindsorInstaller

Store.cs

StoreDto.cs(现在和商店一样)

这就是我调用安装程序的方式IocConfig.cs

我不确定我是否应该包括在内

0 投票
2 回答
1422 浏览

automapper - 使用 ValueInjector 或 Automapper 时,如何防止“目标”对象中的值被“源”对象的空值覆盖?嵌套映射问题?

我的问题

“源”对象视图中不存在的同一类的属性用空值覆盖“目标”对象中的相同属性。我该如何防止这种情况?影响我如何确保仅填充(非空)属性合并到“目标”对象中。我也用 Automapper 尝试过,但失败了,但我很乐意使用 Automapper 解决方案作为替代方案。

我很欣赏这个“空映射”问题以前出现过,但我担心我的情况会更复杂,因为有嵌套对象。好吧,我尝试了建议的选项,但无法使它们起作用。所以我在这里。

非常感谢任何帮助。

我很欣赏这是一个复杂的问题,并且真的非常感谢任何帮助,特别是如果有人可以为我制作代码示例。这几天我把头发拉出来了:(

我尝试过的

我有 2 个对象,一个是原始对象(“目标”),一个(“源”)由一个表单(即视图)填充。

原始的“目标”对象(myOrigDoc)如下所示:

在此处输入图像描述

表单“源”对象(myDoc)如下所示:

在此处输入图像描述

然后我做映射:

使用以下注射器:

我最终得到:

在此处输入图像描述

表单上没有“DateOfBirth”字段,因此我怀疑模型绑定正在为新的“MyDoc”对象上的“DataOfBirth”属性创建空值,当我调用时:

非常感谢,埃德。

EDIT1:我相信这是由于子类的嵌套映射问题。不确定我如何在 ValueInjector 中对其进行排序。

EDIT2:嵌套映射文档中可能的 Automapper 解决方案,但我无法让它工作。我仍然让我的空值进入目标。:

0 投票
1 回答
194 浏览

automapper-2 - 如何从源属性映射到目标?

我发誓我以前做过,但我现在似乎无法让它工作。基本上我得到一个EndUser包含 a Site,我想将它映射Site到一个SiteInfo对象。

这是我的地图配置:

所以EndUser.Site应该可以映射到SiteInfo。我可以通过调用在外面做到这一点Mapper.Map<SiteInfo>(EndUser.Site)。我认为直接从最终用户映射到位置信息只是更简洁的语法。

那么我怎样才能直接从EndUserto映射SiteInfo呢?基本上这是我想写的代码:

目前我正在通过EndUser.Site这样的映射来解决这个问题:

0 投票
1 回答
869 浏览

asp.net-web-api - 映射到两种不同的集合类型时 AutoMapper 抛出异常

我正在编写一个使用 AutoMapper 进行对象映射的 ASP.NET Web API 服务。我正在针对 AbleCommerce 购物车软件构建此服务。有问题的服务(目标)类跟踪用户及其地址。

我的来源是 AbleCommerce 包中的UserAddress类。我已经包含了祖先类的类声明,因为我相信使用泛型约束可能存在问题,但我并不完全确定。

从 AbleCommerce 类到我的服务类的映射按预期工作。只要我忽略映射配置中不需要的属性,从我的服务类映射到 AbleCommerce 类就可以了。但是,对于 Addresses 属性,我不知道如何解决AddressCollectionAbleCommerceUser类和List<AddressModel>我的服务UserModel类之间的差异(从 AutoMapper 的角度来看)。

当我测试映射配置时,我得到的异常是:

这让我很困惑,因为AddressModel该类没有名为Addresses. 我显然错过了一些东西。任何建议、建议或澄清将不胜感激。

0 投票
1 回答
206 浏览

c# - 通过 Automapper 将多个序列自动投影到主 ViewModel

我正在尝试使用 Automapper 将一些数据从 SQL 服务器自动投影到我的视图模型中。

我拥有的视图模型是:

我尝试使用的代码是:

两个属性Id,并且Name是自动投影的,因为它们在Workstation类中具有相同的名称。

我在这样的一些代码行上遇到的异常

是一些奇怪object reference is null的异常,在堆栈跟踪的顶部有一些 automapper 的CreateExpression<>方法,这给了我一个结论,即 automapper 无法生成一个好的表达式来将其转换为 SQL 代码。

当我使用简单的映射时,比如.Name.Category.NameSQL 表中检索或其他单项检索,它可以完美运行。我只需要在通过 Automapper 投影序列时访问多个项目。

0 投票
2 回答
7114 浏览

c# - AutoMapper - 继承映射不​​起作用,相同的源,多个目的地

我可以在 AutoMapper (v2.2) 中为具有相同 Source 类型但不同 Destination 类型的地图使用继承映射吗?

我有这个基本情况(真正的类有更多的属性):

ViewModelA并且ViewModelB是同一实体类的不同表示:

我想BaseViewModel为每个 ViewModel 重用相同的映射,例如:

但不幸的是,这似乎不起作用。像这样的调用:

导致modelPropertyA映射,但不是CommonProperty. 我相信我正确地遵循了https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance中的示例,但我担心使用相同的 Source 类型创建多个地图会使 AutoMapper 出错。

有什么见解吗?我喜欢将基类映射分组在一起的想法,但这似乎不起作用。

0 投票
2 回答
101 浏览

asp.net-mvc-3 - 如何在List之间进行映射和一个字符串?

我有一个像这样的模型和视图模型,但 AutoMapper 不会将值从 MyViewModel 传递给 MyModel!

我的模型:

我的视图模型:

助推器:

我必须做些什么才能使映射正常工作?