问题标签 [automapper-6]
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.
automapper - AutoMapper .ReverseMap() .Ignore() 不工作
版本 6.1.1 有问题。在下面,反向映射的结果仍然填充了 Company 对象。根据这篇文章,它显示了我在下面所做的事情,除了他们忽略了一个属性,而我忽略了一个复杂的对象。
我错过了什么?
c# - Automapper 将 DTO 展平为具有子集合的父级
我有一个扁平的 DTO,我需要将其映射到父子关系。我想通过 AutoMapper 来做到这一点,因为我在其他地方使用它并且效果很好。我已经看到了映射父和子的示例,但当子是一个集合并且源是一个扁平的 DTO 时却没有。我创建了一些可用于正确配置的类。以下是我的示例课程:
我在启动时执行映射器初始化。在我尝试执行映射之前,我没有收到任何错误。下面是我的映射器初始化代码。我一直在注释掉的行中显示我尝试完成此操作的另一种方式:
下面是我用来尝试执行映射配置的代码:
我考虑过使用自定义值解析器,但希望通过正确的配置来避免复杂性和额外的代码。
这是我使用上述代码得到的错误:
错误映射类型。
映射类型:ParentChildDTO -> Parent
类型映射配置:ParentChildDTO -> Parent
属性:儿童
c# - 如何使用 automapper 和constructUsing 映射有点复杂的架构
我有以下无法正确映射的情况:
我从对 camunda api 的调用中收到以下对象的列表。
我想根据表单键将它映射到我的代码(ContactUpdateTask
或)中的特定任务。OrganisationAquisitionTask
以下是我的架构:
我知道如何处理简单的继承和自动映射器,但整个 TContext 让我有点失望。这是我到目前为止所拥有的,但它会产生以下错误:“映射器未初始化。使用适当的配置调用初始化。”
我使用以下代码行进行映射:
camundaTasks
类型在哪里IEnumerable<CamundaTask>
进行映射的正确方法是什么,以便我的任务列表包含ContactUpdateTask
或OrganisationAquisitionTask
取决于 formkey 的对象CamundaTask
?
entity-framework - 如何使用 Automapper 6.1.1+ 映射 EF 动态代理
我试图在保存后将实体框架模型映射到视图模型。
我可以成功地将 Inquiry 映射到 a JournalEntryInquiryVM
,但是当我尝试映射savedInquiry
回 aJournalEntryInquiryVM
时,我得到以下异常,因为它实际上不仅仅是 an Inquiry
,它是由实体框架创建的动态代理:
缺少类型映射配置或不支持的映射。
Mapping types: Inquiry_66DF1FFF68CAC6E17FC0F72D753A523B9CCF3AFA55E82C2B5B910A95B0BFCC79 -> JournalEntryInquiryVM System.Data.Entity.DynamicProxies.Inquiry_66DF1FFF68CAC6E17FC0F72D753A523B9CCF3AFA55E82C2B5B910A95B0BFCC79 -> TLGI.CRM.MVCWeb.ViewModels.CustomerAccounts.JournalEntryInquiryVM
在代码中的这一点上,我的 DbContext 已经被释放,并且我已经检索到我需要的任何导航属性。我只需要它来进行映射,就好像它只是一个查询一样。
看起来这在旧版本的 AutoMapper 中是可能的,但我在 StackOverflow 或 Automapper wiki 上找不到任何关于版本 6.1.1(这是我正在使用的)或更高版本的答案。AutoMapper 变化如此之大,以至于很难找到任何相关的东西。
c# - ForAllOtherMembers 排除基本属性
我正在使用 AutoMapper 6.2.2 映射 A 类的一些属性,对于所有其他成员,我使用以下代码忽略它们:
expression.ForAllOtherMembers(f => f.Ignore());
这就是我想要的,但它也忽略了目标 A 类的基类中的属性(BaseA 的属性)。我想使用 AutoMapper 映射它们(来自基类的属性)和映射 A 类的一些属性。我想要这样的代码函数: 1. 映射 A 类中的一些属性 2. 映射 BaseA(和 BaseBaseA、BaseBaseBaseA 等)中的所有属性 3. 忽略 A 类中的所有其他属性
如果有人有任何想法,请帮助。谢谢。
PS 我正在将 AutoMapper 从 v3.2.1 升级到 v6.2.2。我正在使用函数,它忽略了 A 类中所有未映射的属性(BaseA 属性已正常映射)。更改新的 AutoMapper 后,我无法使用相同的功能 - 我正在寻找替代方法来执行此操作。
automapper - 当对象为空时,Automapper 不映射撰写对象的 ID 属性
我正在使用Automapper 6.2.2.0,我认为这是最新的,在我的 web 项目(ASP.NET WebForms)和我的业务层中,这是Automapper没有映射的地方,不知道为什么:
这里是数据库中的关系,也存在对应的业务对象和数据库的模型(使用LINQ to SQL)
这是Automapper配置文件:
在Global.asax文件中有这个代码来启动Automapper配置:
在这里,按照Automapper文档中的步骤,生成表达式树
不知道为什么Automapper没有映射ServiceCategoryID和ServiceSubCategoryID字段,有什么线索吗?
.net-core - Automapper 如何忽略目标子属性中缺少的属性
我已经按照这个答案(http://stackoverflow.com/a/31182390/58508)忽略了目标中缺少的属性,它工作正常,但我不知道如何对儿童集合属性做同样的事情。
例如,我有一个 CustomerViewModel 和 Customer 类。CustomerViewModel 的属性少于 Customer 类,从 CustomerViewModel 到 Customer 的映射工作正常。CustomerViewModel 具有public virtual ICollection<ContactViewModel> Contacts { get; set; }
比 Customer 属性属性少的public virtual ICollection<Contact> Contacts { get; set; }
属性。当我应用映射时,联系人中的其他目标属性会被覆盖。
我的映射配置文件是:
问候
c# - AutoMapper:如何仅映射匹配的属性名称并忽略所有其他名称?
我是 AutoMapper 的新手并使用 6.2.2 版。我正在尝试将视图模型映射到实体(也使用实体框架)。我只想更新视图模型和实体中存在的属性。该实体具有不属于源视图模型的其他导航属性和相关对象。我目前收到一个错误,表明我在目标实体上有未映射的属性。我的视图模型和实体都有超过 40 个属性,所以我不想明确地将每个属性添加到地图中。
这是我的代码:
地图:
我也尝试了以下但得到同样的错误:
控制器:
错误信息:
InnerException:HResult=-2146233088 消息=找到未映射的成员。查看下面的类型和成员。添加自定义映射表达式、忽略、添加自定义解析器或修改源/目标类型对于没有匹配的构造函数,添加无参数 ctor、添加可选参数或映射所有构造函数参数 ======= ==================================================== = 字符串 -> 用户(目标成员列表) System.String -> 。.***.entities.User(目标成员列表)
未映射的属性:已删除 - 目标上的相关对象和属性列表很长
更新:
我也试过下面的地图。我没有收到任何错误,但没有在目标上更新任何源属性。
c# - AutoMapper.Collections.EntityFramework
以不同的方式问同样的问题!
似乎很清楚我需要详细说明这个问题,因为我没有可行的答案。
基于此 AutoMapper 注册码:
AutoMapper 使用这一行添加了对“更新” DbSet 集合的支持:
通过开放上下文保存更改应导致更新数据库:
这无济于事!
所以回到我原来的问题。如果使用实体集合的 dto 和当前状态调用映射器,则基于此处创建的比较映射返回更新的实体集合:
在此处生成实体集合:
我是否支持使用这个新集合手动迭代新集合并更新 EF?目前尚不清楚我应该做什么?这是我想对结果集合做的吗?
这是我原来的问题。如果是这样,它似乎是多余的。所以我觉得我错过了一些东西。
我感谢一些有用的反馈。请帮忙!
谢谢
c# - Automapper 展平公共嵌套关系
我正在尝试使用 Automapper 将具有嵌套复杂属性的 Entityframework 对象展平为几个不同的模型,这些模型都从基类继承相同的公共属性,其简化版本如下:
由于 AModel 和 BModel 理想地共享一个共同的基础(模型),我想像这样声明一个共同的地图:
然后在将 EFObject 映射到 AModel 时,我会将 AModelId 属性映射到
然后包括 AnotherModel -> Model 映射,这样我就不必多次映射公共属性(一次用于 AModel,再次用于 BModel 等)。
我能够通过使用 AfterMap 来实现上述目标,即
但是,此解决方案存在一个相当大的问题,因为它依赖于 Automapper 的静态实例,并且由于我依赖注入 Automapper 的实例,因此由于未实例化静态 Mapper,我使用此映射的单元测试都失败了.
我可以通过在我的单元测试中初始化静态实例来解决这个问题,但是由于它需要了解你的地图的结构,它违背了使用 Automapper 的目的(我觉得)。
我也知道我可以为每个模型编写一个转换器,但这并不理想,因为它会为我认为受支持的东西产生很多额外的代码,但我正在努力寻找答案。
关于构建地图以解决此问题的最佳方法的任何想法?