问题标签 [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 投票
1 回答
284 浏览

ef-code-first - 导航属性为空时无法保存实体,但 Id 已填充

我最近将我的项目迁移到 MVC4 Web API。在此之前,我使用标准 MVC 控制器。回发实体后,我使用 UpdateModel 更新模型,然后使用 [dbContext].SaveChanges(); 将其保存到数据库中;

一切正常,但在 Web API 中没有 UpdateModel。所以我寻找了一个替代方案:AutoMapper。

我首先使用 EF 5 代码,然后将实体类用作 MVC 的模型。

我的模型类(简化)如下所示:

当模型以 JSON 格式发送时,在序列化过程中将忽略 Parent 属性。

因此,当使用实体在我的 api 控制器上调用 PUT(更新)方法时,Parent 属性为空。

这是 PUT 方法的代码:

Parent 属性在模型中为空,但在 contextModel 中不为空。AutoMapper 只是用 null 覆盖 contextModel 中的 Parent 属性。

然后,当我保存时,我得到一个 InvalidOperationException,尽管 ParentId 存在:

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

任何有关如何以不同方式执行此操作的解决方案或建议都将受到赞赏。

0 投票
3 回答
126 浏览

asp.net - 使用 AutoMapper 时如何检索实体

我使用AutoMapper在 Asp.net 中使用 MVC 。

从这段代码可以看出

我正在尝试将地图 EventEditViewModel 转换为事件。

我需要使用我的服务层将 CandidateId 转换为实际的实体。

知道是否可以在 AutoMapper 中执行此操作?如何设置它

公共类事件(){公共类候选人{get; 放;} }

0 投票
0 回答
503 浏览

automapper-2 - Automapper 构造函数参数

我刚刚开始使用它并立即遇到将参数映射到构造函数参数的问题。

我已经尝试了我可以在 SO 上找到的每个示例,但似乎没有一个有效,而且据我所知,文档没有提到这个功能。

示例显示:

我无法弄清楚访问 UserProfile 对象上的 Id 属性的语法。

另一个例子表明:

在使用这些 lambda 中的任何一个时,我只能访问 ResolutionContext 而不是父对象?

有任何想法吗?

0 投票
1 回答
876 浏览

c# - 如何强制 Automapper 覆盖数组属性?

我在我的项目中使用 Automapper 将业务实体映射到 DTO。

在构造函数中,我使用空数组初始化 Points 属性,以确保它始终不为空。我正在使用基本配置进行映射。

使用 Automapper 2.0.0 它工作得很好,但是在升级到 2.2.0 版本后,我得到了带有内部异常的映射异常:

指数数组的边界之外

似乎 Automapper 试图映射数组的每个成员,而不是覆盖整个数组。如果我从构造函数中删除属性初始化并将其保留为空,则一切正常。

是否可以将 Automapper 2.2.0 配置为始终用新的数组属性覆盖现有的数组属性?

0 投票
2 回答
1546 浏览

automapper - 基于目标值的自动映射器副本

仅当目标值为空时,我才尝试复制源值。我正在使用以下地图

在我的情况下,我正在检查以确保在映射之前目标值为 null。问题是无论目标值如何,复制一直在发生。

我做错了吗?

谢谢伊萨姆

0 投票
1 回答
102 浏览

.net - Automapper 中通过 LINQ 将集合映射到标量的约定

Automapper 已经做了一些很好的约定,例如通过命名约定映射子属性,例如,如果属性上存在这样的属性,则OrderTotal映射自。Order.Total

我想知道是否有办法用 LINQ 运算符名称做类似的事情。例如,如果我有一个名为 的集合IEnumerable<Appointment>,那么如果在我的目标类型上我有一个名为Appointment 的属性并自动调用 AutoMapper Appointments,那就太好了。AppointmentFirstFirst()

目前有没有办法做这样的事情?

0 投票
2 回答
1605 浏览

c# - Automapper 抛出 System.ArgumentException

我已经将 AutoMapper 更新到了第 2 版,现在我遇到了很多问题......

我有一个列表,ItemToMap所有这些对象都引用了同一个对象Tag

当我尝试使用 映射ItemToMapItemToMapDto,出现此错误:

AutoMapper.AutoMapperMappingException :

映射类型:Tag -> TagDto DAL.Entities.Tag -> DTO.Objects.TagDto

目标路径:ItemToMap[][1].Tag.Tag

源值:Entities.Tag ----> System.ArgumentException :已添加具有相同键的项。

这是映射:

这是突出我的问题的单元测试:

让我的映射工作的解决方案是什么?我正在寻找一个全球性的解决方案,因为问题遍布整个代码......

编辑1:

问题来自下面的ctor,如果我评论ctor的代码,一切正常......

编辑2:

Automapper 正在缓存ResolutionContext以重用已设置的解析器。换句话说,它循环遍历映射器并获取在调用 时返回 true 的映射器IsMatch。要知道这是否ResolutionContext被缓存,它会检查目标属性是否已经设置以及上下文的哈希码。因为目的地是在 Ctor 中设置的,所以 Automapper 认为它没有被缓存,因此它调用未缓存的解析器。后一个解析器将缓存但失败,因为哈希码已存在于Dictionary用作缓存存储库中

0 投票
1 回答
6804 浏览

automapper - AutoMapper 复杂对象映射 - 映射一个列表

我有以下课程。域模型是由实体框架创建的,我正在使用 POCO。

我尝试了以下映射。

我也试过

为了更新客户,我从数据库中检索它并使用 customerDTO 更新它

客户对象正在正确更新,并且创建和修改日期未更改。但是订单列表中的每个订单都没有正确更新。它的 productId、创建和修改日期被设置为默认值,而不是从数据库中检索到的值。

我是否必须做其他事情,因为 Orders 是一个虚拟集合?

我是自动映射器的新手,任何帮助表示赞赏。

编辑

我添加了

在应用程序启动时收到以下错误:找到未映射的成员。查看下面的类型和成员。添加自定义映射表达式、忽略、添加自定义解析器或修改源/目标类型

我将映射更新为:

但是订单仍然具有被默认值覆盖的上述属性

0 投票
1 回答
25286 浏览

automapper - 如何将字符串文字映射到目标属性

我希望能够使用 automapper 做这样的事情:

我希望 d.Member 始终是“这个字符串”,而不是从源模型中的任何特定成员映射。将字符串字段以“THIS STRING”作为其值的源模型也不是一种选择。

AutoMapper 是否以任何方式支持这些类型的东西?

0 投票
2 回答
776 浏览

automapper - AutoMappers AllowNullCollections 设置可以限制在配置文件中吗?

注意:我也在AutoMapper 邮件列表上问过这个问题

我的 MVC 应用程序本质上具有两个级别的映射(针对此问题进行了简化):

我们创建了两个配置文件,每个配置文件处理适当映射级别的配置。

“RepositoryObjects”最终被序列化为 XML 并用于 REST Web 服务。我们发现的问题是 RepositoryObject 中的空集合会序列化为 XML 中的空元素,这会导致问题,因为 Web 服务要么不期望任何元素,要么期望包含数据的元素。

我们能够使用 AllowNullCollections 配置设置解决此问题。这将(当然)创建一个空集合而不是一个空集合,然后可以很好地序列化。

但是,我并不完全愿意将其作为全局设置,因为正如Jimmy 所指出的那样,它并不是真正的最佳实践。我很高兴将它包含在RepositoryObject <-> Entity映射中,因为 RepositoryObjects 是自动生成的(无论如何都很丑陋)并且它在应用程序中的级别非常低。但如果可能的话,我宁愿不要“破坏”Entity <-> ViewModel映射。

那么,是否可以为每个配置文件配置此设置?

谢谢。

更新

我在这里创建了测试代码:https ://gist.github.com/4069909

复制到这里供参考:

ProfileClasses.cs

AutoMapperConfigurator.cs

映射测试.cs

测试AutoMapper_Configuration_IsValidAutoMapper_ProfileTwo_DoesntAllowNullCollections通过,但测试AutoMapper_ProfileOne_AllowsNullCollections失败,因为dest.Stuff不为空。