问题标签 [automapper-9]
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.
c# - AssertConfigurationIsValid() 使用嵌套的 ConstructUsing 时,不忽略私有 setter
使用以下示例(LinqPad):
AssertConfigurationIsValid() 当前在我使用 ContructUsing 时引发有关属性的异常。
实际上它确实映射正确,但我希望 AssertConfigurationIsValid 作为我的测试套件的一部分来查找回归(无需对映射器进行手动测试)。
我想保证我的所有属性都通过构造函数从源映射到目标。我希望使用一个构造器,因为它是我的域层,并且构造器强制执行强制性项目。
我不希望通过 IgnoreAllPropertiesWithAnInaccessibleSetter() 功能忽略所有私有设置器,因为我可能会忽略一些我实际上没有设置的东西。
理想情况下,我也不想对出现在构造函数中的每个属性进行手动 Ignore() 操作,因为这会导致代码漂移。
我在 Automapper 中尝试了各种组合,但到目前为止还没有运气。
我想这是一个静态分析挑战;我想知道我的承包商涵盖了 Destination 中的所有属性。而且我想知道构造函数是从源头传递的。
我意识到 Automapper 在这一点上并不是很自动化,有没有一种很好的方法可以依靠 automapper 进行此测试,或者这是否是一个静态分析问题?
c# - AutoMapper - 从 v8 升级到 v9 后无法使用泛型
在我们更新到版本 9 之前,我可能有奇怪的 AutoMapper 设置。
我们从数据库中获取数据,将其包装在一个通用对象中,然后将其映射到 DTO:
这是我的修订和映射配置文件类:
我要么以 NULL DTO 结束,要么得到类似于以下内容的错误:
c# - AutoMapper ForAllMaps 覆盖自定义设置
在以下示例中(可在 LinqPad 中执行),MyString 变为“Hello World”。
但是,如果我取消注释 cfg.ForAllMaps 那么它只是“你好”,它显然会覆盖任何自定义设置。
我希望使用 cfg.ForAllMaps 来设置一堆通用规则,例如源上存在的一个属性,其名称与目标完全不同,但遵循一个通用模式,即源 DTO 中的 Person_Age,将匹配上的 Age 属性一个名为 Person 和 Animal_Age 的目标类型与 Animal.Age 等匹配。除此之外,Person 类型可能具有我希望执行的特定自定义。
ForAllMaps 是否意味着覆盖所有其他设置?如果是这样,是否可以以我希望的方式使用它,即具有可以覆盖的基线配置?或者是否有我应该使用的替代 API(我一直在四处寻找,但到目前为止没有发现任何东西)?
更多信息:
顺便说一句,这是我在 ForAllMaps 中执行的那种功能:
为了澄清我的主要问题是关于 ForAllMaps 是否覆盖 CreateMap() 以及是否有办法让两者很好地协同工作,我的次要示例可能会分散注意力。
c# - 非静态字段、方法或属性需要 Automapper 对象引用
我最近将我的 .net 核心升级到 3.0,Automapper 从 6.2 升级到 9.0。现在,在 mapfrom 函数中使用 mapper.map 时,自动映射器会引发以下编译时错误。
非静态字段、方法或属性“Mapper.Map(xxx)”需要对象引用
Automapper 在 Mapper 类方法的新升级中删除了 static 关键字。
c# - Automapper 9 配置
在以前版本的 AutoMapper 中,我曾经能够像这样配置 AutoMapper:
现在,这句话cfg.AddProfiles(assembly)给了我错误:Argument 1: cannot convert from 'System.Reflection.Assembly' to 'System.Collections.Generic.IEnumerable<AutoMapper.Profile>
我怎样才能得到一个IEnumerable<AutoMapper.Profile>作为参数传递的AddProfiles?
asp.net-mvc-5 - 使用 Automapper 配置文件
概要
我正在创建一个 POC 以将旧的 Web 表单应用程序迁移到 MVC。作为其中的一部分,我希望它使用新的(到这个地方)工具,例如 Automapper、jQuery、Entity Framework 等。
我一直不知道如何正确设置和使用 Automapper 配置文件。我想我可能会因为看到旧 Automapper 版本的帮助而感到困惑。
我想我忽略了一些非常简单的事情。
细节
我有一个工厂方法可以从数据库中获取一些东西,并使用 automapper 将它们从 EF 表示转换为与 db 无关的表示。起初,我只是在我的查询方法中插入了映射:
这很好用。
现在,我希望我们能够在应用程序中声明每个映射一次,以便将任何更新应用于所有用途。我阅读了 Automapper 配置文件,并创建了一个简单的配置文件:
和一个配置类,在 Global.asax 的 Application_Start 中执行
我不清楚我应该如何更改我的工厂以使用映射的配置文件版本。
c# - AutoMapper 版本 9.0.0 - IMappingOperationOptions 上没有 ConfigureMap() 方法
我正在将 Visual Studio 2019 解决方案的项目从 AutoMapper 版本 8.0.0 升级到版本 9.0.0。代码中有许多地方调用了 ConfigureMap() 方法。构建输出状态中的错误:
IMappingOperationOptions<TSource, Tdestination> 不包含 ConfigureMap 的定义,也没有可访问的扩展方法 ConfigureMap...
以下是当前代码的示例:
Mapper.Map(TSource, TDestination, opt => opt.ConfureMap());
Mapper.Map(TSource, TDestination, opt => opt.ConfigureMap().ForMember(dest => dest.someBool, m => m.MapFrom(src => src.someBoolVal));
我查看了 AutoMapper 的从 8.0.0 升级到 9.0.0 的文档,但没有提到不推荐使用 ConfigureMap() 方法。但是,当我搜索 VS 的对象浏览器时,它没有出现。
如果有人可以分享如何在 9.0.0 中完成相同功能的代码,我将不胜感激。
automapper - Automapper:使用参数映射配置文件内的对象
我在使用 ASP.NET Core 2.2 和 Automapper 9.0.0 时遇到以下问题:
我有一个映射到 dto 的实体,这很好用。该实体内部还有一些实体。这些不能展平,因为我们的客户也需要它们。然而,在这些嵌套实体中有一个属性需要额外的映射。
在重叠实体的 Profile 类中,我这样做:
这有效地将 TblLstCode 正确映射到 TransactionCodeResult。但是 TransactionCodeResult 的“DisplayDesc”属性仍然为空...
注意:“lang”属性使用“ProjectTo”方法设置:
我努力了:
1- 在 Profile 类中使用“AfterMap”(结果:DisplayDesc = null)
注意: DescToLanguageDesc 是一个通过反射在实体中查找属性的函数(这有效,不是问题的一部分)
2- 创建 IMappingAction 以在子实体的配置文件中使用(结果:DisplayDesc = null)
这行不通。但是,如果我直接使用选项 2:
然后它可以正常工作!但这意味着我将不得不循环我的结果并再次映射结果中的每个对象......
有没有办法像选项1那样做?
谢谢!
编辑1:
根据 Lucian Bargaoanu 的要求,我添加了一个 BuildExecutionPlan:
表达结果:
}
结果表达式2:
}
编辑2:
好的,我实际上找到了解决方案。我无缘无故地把事情复杂化了……
我将 OperationalToPalletResultProfile 更改为:
TransactionCodeProfile 保持不变:
然后在我使用我的映射的地方我改变了这个:
c# - 源中具有只读属性的 AutoMapper 行为未映射到目标
我有一个配置,它执行反向映射以将源对象展开为目标对象,但是,如果源对象属性是只读的,它会自动被忽略,我必须手动映射它。
我的一些源对象有多达 100 个字段,创建这样的手动映射感觉很麻烦,我不确定为什么自动映射器中存在这种行为。
有关我所描述的工作示例,请参见下面的代码片段。
wcf - 如何在 IIS 托管的 WCF 应用程序中配置 AutoMapper 9.0
我想在 WCF 项目中使用 AutoMapper 9.0,该项目包含将在 IIS 中托管的多个服务。我只发现了另一个相关的 SO 问题,但它处理的是 10 年前的 AutoMapper 版本,并且没有问同样的问题。它的答案类似于建议使用 a 的 Google 上的热门歌曲,ServiceBehavior但当我希望多个服务使用同一个映射器时,这似乎不适用。防守休息。
在 Web 项目中,您可能会在应用程序启动时创建一个静态MapperConfiguration文件Global.asax,但 WCF 没有Global.asax. 看起来有几个选项可以在 WCF 中执行初始化代码:
AppInitialize()在 App_Code 文件夹中包含一个方法。这将在运行时动态编译,人们抱怨它在 IIS 中可能缺少引用问题,所以我不确定AutoMapper,否则一旦部署到 IIS 就会发现它的依赖关系。- 创建自定义
ServiceHost. 这似乎会在应用程序启动时执行一次,但看起来它忽略了我不想要的 web.config 配置。 - 使用每个服务的
Configure方法。这与 #2 具有相同的缺点,而且我开始关注线程安全(如ServiceBehavior方法中一样),因为两个服务可能会尝试MapperConfiguration一次初始化。
我考虑只创建一个具有静态属性的类,如果它尚未创建,它将创建一个静态MapperConfiguration或IMapper实例,但与 #3 一样,我担心这可能不是线程安全的。也许如果我做了这样的事情?
两个服务可以ModelMapper同时调用的地方。另一个缺点是对任何服务的第一个请求都必须等待映射编译,但我不确定我能摆脱这种情况。我绝对不希望它在每次调用时编译映射,甚至不希望每次服务都这样做。您能否就MapperConfigurationIIS 托管的 WCF 中的线程安全以及使用它的最佳方式提出建议?