问题标签 [automapper-7]
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# - 什么是等效于使用 AutoMapper 7.0.1 在 CreateMap 中使用“静态” Mapper.Map 的“实例”?
我正在尝试升级到不再使用静态方法的 AutoMapper 7.0.1。我收到以下错误:
映射器未初始化。使用适当的配置调用初始化。如果您尝试通过容器或其他方式使用映射器实例,请确保您没有对静态 Mapper.Map 方法的任何调用,并且如果您使用 ProjectTo 或 UseAsDataSource 扩展方法,请确保传入适当的 IConfigurationProvider实例。
我认为它来自像这样的配置文件,我切换到不使用静态方法,但它仍然使用Mapper.Map<>()lambda 表达式中的静态方法:
如何获取映射器的实例来代替静态Mapper.Map方法?
c# - 当属性具有相同代码时保持 AutoMapper ProjectTo() DRY
我想使用 AutoMapper 的可查询扩展.ProjectTo(这是一个覆盖 ToString 并具有自定义属性的示例:
现在假设我有上述两个数据库模型和视图模型,我想在查询中将 Claim 投影到 ClaimViewModel。我知道如何做到这一点的唯一方法是这样的:
显然,这复制了 Name 属性和 ClaimType.ToString 方法的代码。是否有任何既定的模式可以解决这个问题并保持代码干燥?我们的模型中有很多自定义属性和 ToString 覆盖。我发现我可以对 Name 属性执行以下操作...首先,在 Claim 类中:
然后在映射中这样做:
对于那个非常简单的情况,这似乎很好,但它不适用于具有外键引用的情况,例如 ClaimType.ToString 方法。在这种情况下,我可以将表达式放在 Claim 中并在 Claim 映射中引用它,但是当我需要将 ClaimType 投影到 ClaimTypeViewModel 时,我必须复制代码。或者,如果有另一个数据库模型引用了 ClaimType 模型,我也会遇到同样的问题。
如果对答案很重要,ORM 是 EF Core @ 2.1.3。
编辑:当我写这个问题时,我没有意识到这一点,但是上面的映射将在没有 ForMember 配置的情况下工作,但我在 SQL Profiler 中注意到查询将拉回 Claim 和 ClaimType 模型中的每一列,而不仅仅是列需要。这很好,但我真的需要 ProjectTo 的性能奖励,只需要拉动实际需要的列。
automapper - 定义重复映射时 AutoMapper 会做什么?
我正在升级代码以在一个非常大的解决方案中使用最新版本的 AutoMapper。在几个 AutoMapper 配置文件中,两个对象之间存在重复绑定 - 每个对象都有不同的ForMember(). 在我之前的开发人员没有注意到这些,但我认为因为我现在正在调用.AssertConfigurationIsValid(),所以我看到了一个列出重复映射的异常。
别人写了这段代码,我不知道它背后的业务逻辑。如果可能的话,我想在不改变应用程序工作方式的情况下解决问题,但我需要知道 AutoMapper 在这些情况下的作用。最好的情况是如果 AutoMapper 在遇到相同对象之间的另一个映射时覆盖以前的映射,这意味着我可以删除所有重复的映射,除了配置文件中出现的最后一个映射。但如果它对映射进行某种合并,那么我将有更多工作要做。
AutoMapper 对重复映射有什么作用?
c# - 如何升级此 TypeConverter 以使用最新版本的 AutoMapper?
我正在尝试将一些我没有编写的代码从 AutoMapper 4.0.4 升级到 7.0.1,但我遇到了问题。有一个 TypeConverter,如下所示:
但是 ITypeConverter 和 ResolutionContext 接口现在已经改变了。ResolutionContext 不再具有SourceValue、DestinationValue、PropertyMap或Parent属性。我认为由于该Covert方法的新签名具有源对象和目标对象的参数,因此我可以省略第一条if语句,如下所示:
但是参数destinationList以 null 的形式出现,所以显然我仍然需要该if语句正在执行的任何逻辑,但是如何为 AutoMapper 7 重写它?
c# - AutoMapper 忽略动态或非完全限定映射配置上的非派生属性
我的 .NET CORE 2.1 代码和 AutoMapper 用于将 DTO 映射到 DomainModels 时遇到问题,反之亦然。
最初我使用 CreateRequest DTO 来创建数据,该数据映射到我的域模型。出于更新原因,我使用派生自我的 CreateRequest DTO 的 UpdateRequest DTO。我的 UpdateRequest 类上还有一些属性,它们也存在于我的完整域模型类中。
现在,在创建请求创建模型实体后,我能够在读取模型实体时重现一个奇怪的错误。使用 AutoMapper 使用我的 UpdateRequest DTO 更新此读取模型会引发以下问题:名为“VersionNumber”的属性似乎被忽略,而其他属性已成功设置。看起来 AutoMapper 将继承的类 CreateRequest 保存为唯一的现有映射,并使用它来映射派生类 UpdateRequest。
我在 LinqPad 中重新创建了这种情况并在此处添加使用的代码。
此外,我必须解释我使用的配置。配置 1 是我第一次尝试仅使用“动态”地图配置。测试此错误时使用了配置 2。最后,仅当您定义了两种类型,即基本类型和派生类型时,映射才会起作用。
1 的结果应该是“VersionNumber”123,而不是 0。2 相同,但没有正确定义。只有在两个映射中使用 2 才会产生预期的结果。所有三个配置选项都适用于“名称”属性。
在 LinqPad 中,我引用了 AutoMapper 的以下版本: ....nuget\packages\automapper\7.0.1\lib\netstandard2.0
我希望在动态配置的初始映射期间发生错误,或者 AutoMapper 识别出我想要映射派生类型,因此必须使用不同的映射。
c# - Automapper ProjectTo 在与自定义映射一起使用时不起作用
我正在使用 asp.net core 2.2、Microsoft.EntityFrameworkCore(2.2.4)、Microsoft.EntityFrameworkCore.Cosmos(2.2.4)、AutoMapper.Extensions.Microsoft.DependencyInjection(7.0.0)
这是我的代码:
映射配置文件.cs
服务类.cs
楷模
在这里,我看到所有值都没有被映射。例如,Name 设置为空字符串,CompleteResponse 设置为 false。
谁能帮我解决这个问题?
c# - 如何使用 Automapper 配置 MappingProfile?
我正在使用 asp.net core 2.2、Microsoft.EntityFrameworkCore(2.2.4)、Microsoft.EntityFrameworkCore.Cosmos(2.2.4)、AutoMapper.Extensions.Microsoft.DependencyInjection(7.0.0)
这是我的代码:
映射配置文件.cs
服务类.cs
楷模
这里我想知道如何在 MappingProfile 类中映射图像值?谁能帮我解决这个问题?
c# - 映射 Automapper 配置中的问题
我有以下 POCO 课程:
在获取系统中存在的员工列表时,对于每个员工,照片 URL (EmployeePhotoUrl) 是使用 EmpImageId 属性从图像表中获取的。
在这种情况下,我想利用 Automapper。我在这里看到的问题是 EmployeePhotoUrl 的分配,因为这个属性是从另一个实体中获取的:图像
任何人都可以帮助我了解如何在这种情况下利用 Automapper。
automapper - AutoMapper:将实体映射到带有后缀的目的地
给定以下示例:
如何使用 -Utc 后缀将所有对象的 DateTimeOffSet 类型的所有源属性从/到它们的目标属性双向映射?(没有后缀的目标属性应该保持未映射)