问题标签 [automapper]

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 投票
5 回答
17498 浏览

c# - 将 CreateMap 和 Map 的实例版本与 WCF 服务一起使用?

automapper 遇到了一些实际问题。我想我已经找到了解决方案,但不确定如何实施。

基本上我正在使用带有 ResolveUsing 和 ConstructedBy 的自定义映射将参数传递给构造函数,我知道大多数人在 global.asax 中设置了一次然后忘记了它。

但问题是我的方法(在 wcf 上)将不同的参数传递给 ResolveUsing 的构造函数......

在我使用静态方法 Mapper.CreateMap 和 Mapper.Map 之前,当不同的请求通过方法(多用户)进入 wcf 服务时,它们似乎相互冲突。

在阅读了一些内容之后,我可以使用 CreateMap 和 Map 的实例版本,以便每个单独的请愿书都有自己的地图并可以传入自己的参数。

但我似乎无法找到如何做到这一点。谁能解释一下?我真的卡住了...

在此之前,我会一次又一次地收到重复的键错误,并且我在构造函数上输入了一个日志跟踪,看起来 1 个请愿书正在覆盖另一个请愿书 - 因此是 Mapper 的静态版本。

好吧,我希望我是正确的,但我找不到其他任何东西......

已编辑 - 我所拥有的一个例子

基本上所有映射都在正常工作,因为我在大多数情况下都使用 MapFrom。

然后我创建了一个我的解析器实例,我传入了一个 URL。我在传递它之前检查了 url 并且它是正确的。但是一旦它返回它就会返回错误的 URL。

我需要传入 URL 的原因是它有变量,所以我需要替换变量......基本上有 2 个 url,具体取决于办公室,我到处都有日志,我可以看到我传入的内容,但一次我把它传进去了——它不是我传入的那个,如果这有意义的话,这很奇怪!!

它是一个 WCF 服务,一个客户端调用该方法两次,传入 2 个不同的办公室,因此有 2 个不同的 URL。但它们总是返回相同的 URL。就像一个会话正在覆盖另一个...

我希望这是有道理的。

发现失败的地方 - 但不知道为什么

请参阅我在代码中的注释。在构造函数中,urlTemplate 到达,我将它保存在一个私有变量中,然后在被覆盖的 ResolveCore 中它是别的东西:-)

我在那里放置了一些 log4net 日志,所以我可以看到发生了什么。

临时解决方案

我已经做了一个临时解决方案,但它真的很糟糕。我确信 automapper 可以做我正在尝试的事情,但我显然做错了什么。

基本上,我通过 LINQ 返回一组记录(这是我的来源),因此我在每条记录上输入了一个新字段,其中包含正确的 URL 模板。然后,我没有(通过构造函数)传入 url 模板,而是将它作为集合(源)上每条记录的属性提供......它工作得很好。

当然,这确实是补丁,并不理想,但它让我跑步。

我哪里错了?

0 投票
1 回答
627 浏览

asp.net-mvc - 从火花模板帖子获取 ViewData.Model

我正在尝试将我的 spark 视图转换为使用 ViewData.Model 而不是 namevaluecollection,以便我可以使用 AutoMapper 在我的 dto 进入我的操作方法之前将其映射到实体。

我可以从视图访问 viewdata.model,但是在回发数据时, viewdata.model 为空。这是一些示例代码:

在我看来: <viewdata Message="string" model="MyDto" /> ${Model.Id} < -- displays MyDto.Id

在我试图做的服务器上的过滤器中: var model = filterContext.Controller.ViewData.Model;

但 ViewData.Model 为空。这是在 OnActionExecuted 期间。是否有一个技巧可以让 ViewData.Model 从发布的视图中获取值?

0 投票
3 回答
932 浏览

asp.net-mvc - asp.net mvc 自动映射器解析

假设我们有这样的东西

可以使用 automapper 来执行从 Person 解析到 PersonViewModel 并返回吗?

0 投票
2 回答
2962 浏览

nhibernate - 如何使用 AutoMapper 简单地将 NHibernate ISet 映射到 IList

我正在尝试使用 AutoMapper 从 DTO 映射到我的域。

我的 DTO 可能如下所示:

我的域对象是这样的:

我将如何设置 AutoMapper 以便能够从这些 Array 映射到 Set。似乎 AutoMapper 正在获取数组并将它们转换为 IList,然后在转换为 ISet 时失败。

这是例外

我希望找到一种简单的通用方法来执行此操作,以便我可以最小化从 DTO 映射到域所需的基础设施。任何帮助是极大的赞赏。



更新:
那么我将如何建模 MyDomain -> ChildDomain 而不会以贫血的域模型结束?我知道如果没有 MyDomain 或 ChildDomain 中的业务逻辑,域模型目前是贫乏的,但我们的目标是在我们前进的过程中添加业务逻辑。我只是想确保我的 View Model 可以翻译成领域模型并持久化。

从视图和域之间的简单映射到后来添加业务规则,您对这个场景有什么建议?

再次感谢你的帮助。

0 投票
2 回答
2228 浏览

c# - DTO/命令模式问题

在 LosTechies 上有一个关于 AutoMapper 的非常有趣的讨论(一个支持/反对 2-way mapping 的论点)。

由于我目前正在解决的问题,这实际上引起了我的注意。我正在处理一件货件,以便向我的用户提供诸如费率/交货时间等信息。为了集中实际服务,我有一个 WCF Web 服务,它可以保存任何域实体。

为了简化域模型,我基本上有 2 个类:

我还创建了一组相应的 DTO,以减轻线路上的负载。演示部分(或任何涉及 Web 服务的部分)在不了解域模型的情况下使用 DTO。

我的问题来了。为了创建一个货件,该服务接受一个项目列表。创建货件是有逻辑的,这一切都隐藏在 Web 服务后面。从本质上讲,这意味着 ItemDTO 通过网络传递(客户端 -> 服务器),创建发货,然后将 ShipmentDTO 传回(服务器 -> 客户端)。现在,ShipmentDTO 也有一个 ItemDTO 的子列表,它创建了 2 路映射场景。

这不仅仅是一个简单的 CRUD 操作,而且我对命令消息模式还很陌生,所以我很好奇社区将如何解决这个问题。

您是否通过双向映射双向传递 DTO?

示例用法(表示层):

0 投票
3 回答
3811 浏览

castle-windsor - 注入 AutoMapper

我一直致力于将 AutoMapper 注入控制器。我喜欢 Code Camp Server 的实现。它围绕 AutoMapper 的 IMappingEngine 创建一个包装器。依赖注入是使用 StructureMap 完成的。但我的项目需要使用 Castle Windsor。那么,我们如何使用 Windsor 实现以下依赖注入和设置呢?我不是在 Castle Windsor 中寻找逐行等效实现。如果您想这样做,请随意。相反,什么是 Windsor 等效于 StructureMap 的注册表和配置文件?我需要 Profile 来定义 CreateMap<>,如下所示。

谢谢。

会议负责人

会议映射器

自动映射器注册表

会议映射器简介:

0 投票
1 回答
345 浏览

.net - MVC - 另一个模型视图中的模型视图

在另一个模型视图中使用一个模型视图是一种好习惯吗? AutoMapper 将如何使用它?

例子:

0 投票
1 回答
1360 浏览

iis-7 - 使用签名程序集时 IIS7 中的 AutoMapper 出现问题

我正在尝试将AutoMapper与在 IIS 7 上运行的 Web 应用程序一起使用。预期使用它以便将外部 dll 中定义的域类型映射到 IIS 应用程序中定义的视图模型。这工作正常,除非外部 dll 被烧毁。然后我收到以下错误:

重现问题的步骤:

1) 在安装了 IIS 7 的机器上使用 Visual Studio 2008 创建一个新的 Web 应用程序。(我们使用的是 Windows 7)。

2) 从http://www.codeplex.com/AutoMapper下载 AutoMapper.dll 。(我们使用的是 0.4.xx 版本)并将对该 Dll 的引用添加到您的 Web 应用程序中。

3) 在默认页面后面的代码中加入如下代码:

4)新建一个名为“TestLibrary”的类库,将Class1.cs文件重命名为Source.cs,在里面放入如下代码:

5) 将对该库的引用添加到您的 Web 应用程序。

6) 运行解决方案,您应该会看到“Automapper 有效!” 输出。

7)要让它失败,你必须做两件事。
i) 将网站配置为在 IIS 而非 Visual Studio 开发服务器下运行。ii) 签署 TestLibrary 程序集。之后,运行解决方案应该会产生上面报告的错误。

有谁知道如何解决这个问题?根据 IIS 管理控制台,我们已经检查并且应用程序正在以完全信任的方式运行。

0 投票
2 回答
1826 浏览

c# - Automapper,泛型,dto funtimes

这是交易:

我有一个报表设计器,用户可以在其中基于一些预定义的数据集创建报表。他们可以选择要包含在报告中的一组列,然后在运行报告时,通过使用 automapper 将 NHibernate 集合映射到 dto 类集合来创建 IList。

这样做的问题是,DTO 集合中有大量冗余列,因为无论是否需要,它都会填充所有数据。

我对此的解决方案?为什么不在运行时创建一个 DTO 类型,使用我们拥有的信息并将 nhibernate 集合映射到动态创建的 DTO 集合,只使用所需的属性:

问题?

我们不能使用生成的类型作为泛型参数来新建 IList:s

我似乎总是遇到这样的问题。我在滥用仿制药吗?这可能吗?这将使应用程序更快(一旦添加了缓存和一些禁止重新生成临时程序集的检查等)并且维护起来也少了很多麻烦。

w://

我们不能使用生成的类型作为泛型参数来建立 IList:s

我似乎总是遇到这样的问题。我在滥用仿制药吗?这可能吗?这将使应用程序更快(一旦添加了缓存和一些禁止重新生成临时程序集的检查等)并且维护起来也少了很多麻烦。

w://

0 投票
2 回答
2511 浏览

asp.net-mvc - 我的 AutoMapper Customer ValueResolver Hook 有什么问题?

我的 Global.aspx 中有以下钩子

在我的控制器中:

此行执行但我的自定义解析器从未被调用。

解析器如下所示:

应用程序编译并运行,但是没有自定义解析器,对象中没有任何内容,它只是创建一个带有异常抛出 get 访问器的模拟对象。