问题标签 [automapper-5]

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 回答
511 浏览

c# - 映射多个派生类型

我正在尝试映射多种类型,大约 50 种到其他类型(其中 50 种)它们是一对一的,但我想从接口映射到具体类型。

相关代码示例:

预期的输出应该是:

老虎机

小熊虚拟机

但实际输出是:

动物虚拟机

动物虚拟机

我不确定如何设置自动映射器来映射这些类型。

如果我推荐基线映射:

然后我得到以下异常:

错误映射类型。

映射类型:

List'1 -> IEnumerable'1 System.Collections.Generic.List'1[[ConsoleApplication1.Program+IAnimalBO, ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic。 IEnumerable'1[[ConsoleApplication1.Program+AnimalVM, ConsoleApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

0 投票
1 回答
86 浏览

automapper - 我如何映射嵌套对象

我在 Automapper 中设置了以下映射

我正在尝试将 ContactRegisterViewModel 转换为 SecurityAccess。转换部分有效。我能够获得填写在 SecurityAccess 中的相关属性,包括 SecurityAccess 模型中的 Address 属性字段,但是我很惊讶地试图进一步将 ContactRegisterViewModel 属性 CompanyName 映射到 Address.Company.Name 中的属性。

有什么建议我可以映射整个对象树吗?

0 投票
1 回答
18122 浏览

c# - AutoMapper新的IValueResolver如何使用?

不知如何IValueResolver在新版AutoMapper中使用新界面。也许我在以前版本的 AutoMapper 中使用不当......

我有很多模型类,其中一些是使用 sqlmetal 从多个数据库服务器上的多个数据库生成的。

其中一些类有一个字符串属性 ,PublicationCode它标识订阅、报价、发票或任何它属于哪个出版物。

发布可以存在于两个系统(旧系统和新系统)中的任何一个中,因此我在目标模型类上有一个 bool 属性,它告诉发布是在旧系统中还是新系统中。

使用 AutoMapper 的旧版本(<5?),我使用 aValueResolver<string, bool>作为PublicationCode输入参数,并返回一个bool指示发布位置(旧系统或新系统)的指示。

使用 AutoMapper 的新版本(5+?),这似乎不再可能。新的 IValueResolver 需要对我拥有的源模型和目标模型的每一个组合进行唯一的实现,其中src.PublicationCode需要解析为dst.IsInNewSystem.

我只是试图以错误的方式使用价值解析器吗?有没有更好的办法?我想使用解析器的主要原因是我希望将服务注入构造函数,而不必DependencyResolver在代码中使用等(我正在使用 Autofac)。

目前,我通过以下方式使用它:

这是我拥有的几个数据模型类之一,其中包含一个 PublicationCode 属性)。这个特定的类被映射到这个视图模型:

这两个类的映射定义是(其中表达式是 IProfileExpression),删除了不相关的映射:

和解析器:

以及映射器的使用:

0 投票
2 回答
1930 浏览

automapper - 如何在 AutoMapper 5 中跨不同映射重用 ValueResolver?

我刚刚尝试将 AutoMapper 升级到 5.0.2,但遇到了障碍。

根据迁移文档,值解析器现在可以访问目标对象:

值解析器的签名已更改,以允许访问源/目标模型。

这导致每个值解析器都与一个目标类型绑定。

但是,我们的一些值解析器用于多种目标类型。例如,我们有一个解析器,用于映射我们 DTO 的所有 ID 属性。解析器通过注入解析器的服务来修改 ID。

如何在 AutoMapper 5 中定义可重用的值解析器,这样我就不必为每个目标类型创建具有完全相同实现的专用解析器?

注意:使用值解析器而不是直接操作值的主要原因是依赖注入。根据这个答案,值解析器是在映射期间使用依赖注入服务的最佳方式。

0 投票
1 回答
1351 浏览

c# - 映射配置或不支持的映射

我有两种类型。业务层之一:

另一个在数据层(实体框架):

这是我从服务层获得的代码:

例外是:{"Missing type map configuration or unsupported mapping.\r\n\r\nMapping types:\r\nCar_70BD8401A87DAAD8F5F0EC35BCAE5C9E6EE2D6CB5A1AFCE296B313D8AD87D2E9 -> Car\r\nSystem.Data.Entity.DynamicProxies.Car_70BD8401A87DAAD8F5F0EC35BCAE5C9E6EE2D6CB5A1AFCE296B313D8AD87D2E9 -> Business.Car"}. 怎么了?我已经标记了导致异常的行(倒数第三行)。

0 投票
1 回答
2804 浏览

.net - 使用 Automapper 从动态复制属性

我有一个从 JSON 动态构建的动态对象(实际上是来自 JSON.NET 的 JObject)。我想将其属性复制到现有对象。动态对象的属性应该存在于目标对象的类型中,如果不存在,则可以出错。为此,我正在查看最新版本的 Automapper。我试图创建从 JObject 到正确类型的映射,但我认为它不会起作用,因为 JObject 中的属性存储在内部字典中。这可能吗?

0 投票
1 回答
2758 浏览

c# - 映射虚拟属性 Automapper

我对映射模型有一些问题。所以我有一个实体模型

和 DTO 模型

所以我在将 User 映射到 UserInfo 缺少 GroupInfo 的配置类型时遇到问题。如何初始化第二个映射?

用户映射到 UserInfo 如下:

0 投票
1 回答
469 浏览

c# - 从双映射

使用 Automapper 5.0.2.0 我正在尝试从 TypeA 映射到 TypeB:

我假设长度以英寸为单位存储并创建了此映射配置文件:

我这样使用它:

但是,最后一行会引发以下错误:

这似乎是 Automapper 处理的一个超级简单的案例,但是我似乎无法修复该错误。任何建议表示赞赏。

0 投票
1 回答
1481 浏览

c# - Auto Mapper 5,没有 Ioc 和 Webforms

现在 AutoMapper 取消了静态 API 和在运行时更改映射的能力,我在没有 IoC 管理器的情况下使用我的 WebForms 应用程序时遇到了问题。

出于这个问题的考虑,我不能在这个应用程序中引入一个 IoC 管理器,虽然这将是“很好的做法”,但如果没有它,应用程序已经运行了很多年,而且它不能在此时此刻。将来可能,但不是现在。

使用 AutoMapper,我以前做的事情是在我实例化的每个类中都有一个由构造函数自动调用的方法。在那种方法中,我将有必要的:

来电。这具有以下优点:

  • 我只映射了每个请求所需的内容(并且根据程序流程,此映射列表将增长到我需要的内容)
  • 所有类型都是“本地的”——这意味着我不必在解决方案中引用其他项目

我很高兴能够忍受以这种方式执行操作的每个请求的性能,而不是在 Application_Start() 中执行一次。

但是使用 AutoMapper 5... 阅读了从静态 API 迁移的内容后,我现在必须:

  1. 在我可以访问我想要映射的所有类型的“某处”进行所有映射。所以无论我把它放在哪里,我都必须在我的解决方案中引用所有其他程序集?
  2. 将 MapperConfiguration() 实例存储在全局可访问的某个地方 - 可以说是 HttpContext 或 HttpApplication 以便我可以调用 MapperConfiguration.CreateMapper() 我现在需要确保我可以在任何地方访问 HttpContext / HttpApplication 。这最终意味着不需要说 HttpContext 的项目现在需要访问它。

如果我在上面 1. 和 2. 中的假设是正确的,那么我现在有一大堆紧密耦合的意大利面条代码。

所以我的问题是:

如何在没有 IoC 的情况下优雅地在解决方案中有大量项目(因此也有很多类型)的 webforms 应用程序中使用 AutoMapper 5?

0 投票
1 回答
500 浏览

c# - Automapper v5 升级后的空属性值

我有以下代码一直在 Automapper v3 中工作,但不再在 v5 中工作。 更新它也适用于 v4。

CallScheduleProfile在其构造函数中将Title属性设置为将值传递true给它的类的实例。

CallScheduleProfileViewModel在其构造函数中,将属性设置为传递andTitle值的不同类的实例。true"Title"

我已经在 AutoMapper 中为所有 4 个类设置了映射,然后我调用了 Map。

结果是地图之后的Title属性CallScheduleProfileViewModel有一个布尔值trueFriendlyName为空,即使它是在其构造函数中设置的。

我相信正在发生的事情是,构造函数 onCallScheduleProfileViewModel被调用并被FriendlyName分配,但是当映射发生时,它调用构造函数Entry,然后映射UxEntry存在的任何属性并将其分配给Title属性,默认情况下FriendlyName将为 null,因为FriendlyName不存在UxEntry其值的不被复制。

我的假设可能是错误的,但无论哪种方式,我如何FriendlyName在映射中填充?

更新:我查看了有关嵌套类型的 Automapper文档,并且文档中提供的代码也存在问题。InnerDest如果我在OuterDest构造函数中添加一个字符串属性并在Map其值为空之后设置其值。