问题标签 [automapper-3]

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 投票
1 回答
1088 浏览

c# - 无法将服务层实体映射到域模型实体

我正在尝试使用一个来获取一些数据GetData。这个业务方法是通过这个 Action 方法中的一个服务层从控制器调用的:

我收到此错误:

无法将类型“ System.Collections.Generic.List<BusinessService.Report.MeanData>”隐式转换为“ DomainModels.Reports.MeanData

一位同事建议为此使用 Automapper,所以我根据对他有用的方法更改了这样的 Action 方法:

我收到此错误:

AutoMapper.Mapper.Map<DomainModels.Reports.MeanData,BusinessService.Report.MeanData>' (DomainModels.Reports.MeanData)'的最佳重载方法匹配有一些无效参数

DomainModel 实体:

可以在生成的 BusinessService 实体中找到reference.cs与 DomainModel 实体同名的属性。

在这两种情况下我做错了什么?

0 投票
1 回答
1214 浏览

c# - AutoMapper 包含自定义列表的所有属性

当我将 A 映射到 B 时,除 CustomCollection 中的 X 和 Z 之外,所有属性都被正确映射。

CustomCollection 正确获取了 SomeObject 的初始化列表,并且 SomeObject.Name 也正确映射。

只有我在集合中声明的自定义属性 X、Z 不会被映射。

我究竟做错了什么?

我发现的唯一方法是像下面那样进行映射后,但是它有点违背了使用 automapper 的目的,并且每次我向 CustomCollection 添加新属性时它都会中断。

0 投票
1 回答
580 浏览

asp.net-mvc - 自动映射器:int?当有源值时被映射为 null

我创建了以下地图:

在这张地图中,有一些属性是“int?” (可为空的外键),例如 IDSUPERVISOR。

为了应用映射,我使用以下句子:

  • 如果源具有值 (5) 而目标没有值 (null),则将值应用于目标 (5)。
  • 如果源具有值 (6) 而目标具有另一个值 (5),则该值将正确应用于目标 (6)。
  • 但是,如果两者具有相同的值(不修改值),则destination 中的属性映射到NULL,这是错误的!

这是一个错误还是我遗漏了什么?

编辑:我已经能够在一个简单的项目中隔离问题。我在 GitHub 中创建了一个存储库:https ://github.com/farlop/TestAutomapper 。它包括用于创建数据库模式和示例数据的代码和 SQL 脚本。要对其进行测试,只需编辑 IDSUPERVISOR 列中具有值的记录,然后保存而不更改任何数据。您可以看到值在不应该更新为 null 的情况下如何更新

0 投票
1 回答
181 浏览

automapper - 如何从一个对象的属性映射到另一个对象的构造函数参数?

想象一下这样的类:

我想配置从Source到的映射Destination我希望 AutoMapper 自动匹配Source.NameDestinationname构造函数参数,因为它们具有相同的名称(不包括命名约定)和类型。但是,第二个构造函数参数需要自定义映射。

到目前为止,我能找到的最好的方法就是手动进行所有映射:

但是,通过这样做,我失去了基于约定的映射提供的可维护性改进。

0 投票
0 回答
1111 浏览

c# - Automapper 和引用父对象的对象集合

如果我用一个(虚构的)例子来解释这一点,这可能是最简单的。

我有一个包含 Order 对象的 nHibernate 模型。此 Order 对象包含 OrderItem nHibernate 对象的集合。

我有一个 Order ViewModel,其中包含 OrderItemDto 的集合(实际上只是 POCO)。

在我的 UI 中,我显示了一个订单对象和一个 OrderItems 列表,它们在列表中是可编辑的。模型绑定负责填充 OrderViewModel 和 OrderItemDto 集合。

这是我的模型

这是我的视图模型/dto

我的问题是如何将 OrderItemDto 的集合映射到附加到订单的 OrderItem 对象的集合。我想控制 orderItem 对象的生命周期。IE,如果 OrderItemDto 有一个 Id,我想从存储库中获取 orderItem。如果它不存在,我想创建一个新的并将其订单属性设置为父订单。

这是我认为我想要的伪代码:

但显然这不起作用,因为 IValueResolver 不是这样工作的。

这个How to assign parent reference to a property in a child with AutoMapper有点类似,但如果 OrderItems 已经存在,则不允许我从存储库中获取它们。

谢谢,戴夫

0 投票
1 回答
472 浏览

automapper - Automapper ReverseMap 不会自动映射接口

我创建了一个简单的测试用例来重现我的问题。给定以下两个接口

以及下面的映射代码和测试

我得到了这个例外。

我错过了一些明显的东西吗?据我了解,只要名称相同,CreateMap 就会自动为您的属性创建映射。

从接口映射到接口时,自动映射不起作用吗?

0 投票
0 回答
1417 浏览

c# - Automapper - 未正确从源对象复制到目标对象。错误需要默认构造函数

当我将源对象映射到现有实例时,它似乎想要创建一个新对象而不是复制到...

这是我的测试场景:

我收到此错误:类型“Raven.Lib.Domain.CRM.Models.CustomerProxy”没有默认构造函数

客户群:

现在如果我创建一个空的默认构造函数

它没有错误,但似乎清除了我的旧实例就是证明。

映射忽略我不想覆盖的属性。

之前: 在此处输入图像描述 之后: 在此处输入图像描述

我是否错误地使用了自动映射器?domainCustomers = Mapper.Map(customers, domainCustomers);

小背景:我正在使用虚拟代理模式来延迟加载我的联系人、部门和组,因为它们是非常大的列表。这就是我从基类 Customer 继承的原因。

0 投票
2 回答
2329 浏览

linq - Automapper 与 linq 如何?

好的,我真的很难找到一个很好的例子来说明我需要做什么。所以,我会在这里问。

假设我有一个名为 Customer 的实体类 (EF) 和一个名为 CustomerViewModel 的相应视图模型类。

使用 AutoMapper,我创建了以下映射:

我将如何修改以下代码以使用此映射?

提前致谢。

0 投票
1 回答
1203 浏览

c# - 使用 AutoMapper 映射子集合

我正在使用 Automapper 制作对象的副本

我的域可以简化为以下示例

考虑我有Store一个集合Location

下面是一个商店实例的例子

我的映射配置为

我得到映射的实例

我从映射中获得的目标对象有一个 Locations 集合,在源中存在相同的两个实例,即

Object.ReferenceEquals(source.Locations[0], destination.Locations[0])返回TRUE

我的问题是

如何配置 Automapper 在映射时创建新的 Location 实例。

0 投票
2 回答
4217 浏览

c# - 使用 ForSourceMember 时 AutoMapper 的 Ignore() 不起作用?

我试图忽略源类型的属性。我已经定义了这样的映射:

当我调用 Map 函数时,

目的地的属性无论如何都会更新。我正在使用从 NuGet 下载的最新稳定版本。

任何想法为什么这不起作用?

我发现了与此类似的问题,但没有附加答案。[问题]:AutoMapper 的 Ignore() 不起作用?