问题标签 [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 回答
424 浏览

c# - 在 ConvertUsing 之后忽略未映射的成员

这是我的代码:

请注意,ApplicationUsers 继承自 IdentityUser 类。

当我测试这个映射时,我得到了这个错误:

System.NullReferenceException:对象引用未设置为对象的实例。

我知道这个错误是因为某些成员没有被忽略。像这样的东西

会帮助我,因为默认情况下会忽略其他成员,但问题是如果我想使用这种代码,我无法加密我的成员,因为我无法访问配置文件的 DI 配置。因为配置文件的参数较少。

我需要类似于可以在 ITypeConverter 函数中实现的上层代码的东西。

任何人有任何解决方案?

0 投票
1 回答
1537 浏览

asp.net - 如何在 vb.net global.asax 中初始化 automapper

我正在尝试使用 ASP.NET API 2.0 版中的 vb.net 在 Global.asax 文件中初始化 Automapper。我正在使用 Auto Mapper 5.2 版。我可以使用 C# 代码进行初始化,但我对 VB.Net 不太确定。谷歌搜索后,我发现了一些东西,这就是我现在正在尝试的:

重载解析失败,因为无法使用以下参数调用可访问的“New”:“Public Overloads Sub New(configurationExpression As MapperConfigurationExpression)”:Lambda 表达式无法转换为“MapperConfigurationExpression”,因为“MapperConfigurationExpression”不是委托类型。

然后我从 Application_Start() 调用了这个模块

在这里我没有遇到任何错误,但在上一行我遇到了导致问题的错误。但上次我在 global.asax 文件中使用 C# 和以下代码行完成了这项工作

在 Application_Start() 下运行良好,但现在即使我转换了上面的代码行,我仍然面临问题。在这里,我想提一下,我从以下 链接中找到了 VB.Net 代码,如果有人能在上面提供帮助或建议,我将不胜感激。谢谢。

0 投票
6 回答
17802 浏览

c# - 英孚和自动映射器。更新嵌套集合

我试图更新国家实体的嵌套集合(城市)。

只是简单的实体和 dto:

和代码本身(为简单起见在控制台应用程序中测试):

此代码引发异常:

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

即使上次映射后的实体看起来很好并且正确地反映了所有更改。

我花了很多时间寻找解决方案,但没有得到任何结果。请帮忙。

0 投票
1 回答
2667 浏览

c# - AutoMapper IValueResolver 抛出错误类型不能用作泛型类型或方法中的类型参数“TValueResolver”

我尝试在新版本的 AutoMapper 中实现 IValueResolver 接口。我已经实现了 ResourceTypeResolver 类如下..

在我在 Mapper Configuration 中使用了这个 ResourceTypeResolver 之后

在这里,我在 ResolveUsing context 中遇到错误,

错误 19 类型“PMeasy.Web.AutoMapper.ResourceTypeResolver”不能用作泛型类型或方法“AutoMapper.IMemberConfigurationExpression.ResolveUsing()”中的类型参数“TValueResolver”。没有从“PMEASy.Web.AutoMapper.ResourceTypeResolver”到“AutoMapper.IValueResolver”的隐式引用转换。D:\PMEasy\Development\PMEasyDev\PMEasy.Web\App_Start\AutoMapperConfig.cs 58 59 PMEasy.Web

有什么想法可以解决这个问题吗?

0 投票
1 回答
1205 浏览

c# - AutoMapper 投影错误

我在 web api 中有 get 方法:

此方法按预期工作。但我不想从数据库中检索所有记录,然后映射到 DTO 并返回结果。我只想使用AutoMapper.QueryableExtensions并选择必填字段。

在映射配置中,我定义了如下映射:

运行时出现以下异常

“exceptionMessage”:“缺少从 CategoriesAndBrandsServices.Models.Category 到 System.Collections.Generic.List 1[CategoriesAndBrandsServices.Dtos.CategoryDto]. Create using Mapper.CreateMap<Category, List1> 的映射。”、“exceptionType”:“System.InvalidOperationException”、“stackTrace”:“在 AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpression( ExpressionRequest 请求,Expression instanceParameter,IDictionary 2 typePairCount)\r\n at AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpression(ExpressionRequest request, IDictionary2 typePairCount)\r\n 在 AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpression(ExpressionRequest request)\r\n 在 AutoMapper.LockingConcurrentDictionary 2.<>c__DisplayClass2_1.<.ctor>b__1()\r\n at System.Lazy1.CreateValue()\r\n 在 System.Lazy 1.LazyInitValue()\r\n at System.Lazy1.get_Value ()\r\n 在 AutoMapper.LockingConcurrentDictionary 2.GetOrAdd(TKey key)\r\n at AutoMapper.QueryableExtensions.ExpressionBuilder.CreateMapExpression(Type sourceType, Type destinationType, IDictionary2 参数,MemberInfo[] membersToExpand)\r\n 在 AutoMapper.QueryableExtensions.ProjectionExpression.To[TResult](IDictionary2 parameters, IEnumerable1 memberPathsToExpand)\r\n 在 AutoMapper.QueryableExtensions.ProjectionExpression.To[TResult](对象参数,表达式1[] membersToExpand)\r\n at AutoMapper.QueryableExtensions.Extensions.ProjectTo[TDestination](IQueryable source, IConfigurationProvider configuration, Object parameters, Expression1[] membersToExpand)\r\n 在 AutoMapper.QueryableExtensions.Extensions.ProjectTo[TDestination](IQueryable 源,表达式1[] membersToExpand)\r\n at CategoriesAndBrandsServices.Controllers.CategoriesController.<Get>d__0.MoveNext() in c:\\OnlineShoppingWebsite\\Services\\CategoriesAndBrandsServices\\CategoriesAndBrandsServices\\Controllers\\CategoriesController.cs:line 24\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter1。 GetResult()\r\n 在 System.Threading.Tasks.TaskHelpersExtensions.d__3 1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 结束从先前引发异常的位置的堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r\n 在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()"

0 投票
1 回答
749 浏览

c# - Automapper 配置文件的多个来源

在程序集扫描(大约 4.x)之前,我们做了如下的事情来提供一种集中的方法来添加配置文件:

所以现在有了 5.2,我们想要使用程序集扫描并且能够传入一些额外的配置文件来注册。但是 IMapperConfiguration 不再可用。所以虽然我可以这样做:

如何添加我希望包含在 Mapper.Initialize() 调用中的其他配置文件?(它们不在要扫描的程序集中)。

0 投票
0 回答
467 浏览

c# - Automapper IValueResolver 不支持 Nullable 类型 Guid

最近我更新了 automapper 5+ 版本,并意识到 IValueresolver 对于 Nullable 类型的 Guid 无法正常工作。

我创建了一个值解析器,如下所示:

和映射配置如下:

dst.ParentId 是 Nullable Guid。它不会触发 GanttTaskParentIdResolver 进行解析,并且始终为 ParentId 提供 null。

有人遇到过同样的问题吗?

更新 - 我测试了可为空的 int 并且它有效。可以为空的 Guid 似乎有问题

0 投票
2 回答
2303 浏览

c# - 是否可以使用新的 MapperConfiguration 方法?

我有一个非常简单的问题......是否可以像这样设置 AutoMapper:

我将每个映射拆分为如下方法:

我问是因为我收到了这个错误:

映射器未初始化。使用适当的配置调用初始化。如果您尝试通过容器或其他方式使用映射器实例,请确保您没有对静态 Mapper.Map 方法的任何调用,并且如果您使用 ProjectTo 或 UseAsDataSource 扩展方法,请确保传入适当的 IConfigurationProvider实例。

我通过将部分映射代码移动到新的 MapperConfiguration 进行了测试,它正在工作。

谢谢,

大卫

0 投票
0 回答
347 浏览

json.net - 在 Automapper for JObject 中只配置一次 mapFrom 表达式以获得通用访问模式

我正在从 JObject 映射到自定义类,它工作正常,但我宁愿告诉它一次执行这种默认类型的映射,而不是必须为每个属性执行一个 .MapFrom。大多数源“属性”只是目标上 Pascal 大小写属性名称的小写下划线版本。

由于 JObject 没有我想要的值作为属性,我必须通过 MapFrom 对它们进行索引(我不能使用 SourceMemberNamingConvention/DestinationMemberNamingConvention)。所以我想要一个表达式,我可以通过 ForAllOtherMembers 之类的东西来应用从 JObject 检索这个默认值,但我不能让它工作......我有什么选择?

我曾尝试使用 ResolveUsing 方法,但我也必须使用 ConstructedBy 方法,但 ResolveUsing 返回一个 void(现在?在版本 5 中),所以我无法对其执行 .ConstructedBy() 。

下面我必须执行每个 MapFrom,即使它们遵循相同的访问模式:

更新:我继续做更多的手动方式并用委托替换字符串

0 投票
1 回答
463 浏览

c# - 具有继承功能的 Automapper 5.2 不起作用

我有一个实体:

我有一个 ViewModel:

我需要将 Entity.Certificate 映射到 ViewModel.Certificate (我根本不需要映射 BaseEntity,我想摆脱它)。我有映射器配置文件:

在 ConfigureServices 中注册:

上面提到的所有 3 个类都在不同的项目中(如果有任何意义的话)。

这是控制器构造函数:

并获取我将实体映射到 viewModel 的方法:

看起来是正确的,对吧?但:

错误映射类型。

映射类型:IEnumerable 1 -> IEnumerable1 System.Collections.Generic.IEnumerable 1[[AlexanderTsema.Storage.Entities.Entities.Certificate, AlexanderTsema.Storage.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.IEnumerable1[[AlexanderTsema.ViewModels.ViewModels.Certificate, AlexanderTsema.ViewModels, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

和 Inner Exc:缺少类型映射配置或不支持的映射。

映射类型:证书 -> 证书 AlexanderTsema.Storage.Entities.Entities.Certificate -> AlexanderTsema.ViewModels.ViewModels.Certificate

请指教。

我试图将 Entity.Certificate 映射到 Entity.Certificate 并且它工作正常。