AutoMapper 在映射子对象时传递父引用

2024-02-28

我正在尝试使用 AutoMapper 将从 Web 服务接收到的一些 DTO(数据契约)对象映射到我的业务对象中。根 DTO 对象包含子对象的集合。我的业务对象还有一个子业务对象的子集合。为了让 AutoMapper 工作,我必须在业务对象中的集合属性上包含一个 setter,否则集合将始终为空。此外,我必须向集合类型添加默认构造函数。因此,在我看来,AutoMapper 正在实例化一个新的集合对象,填充它并设置为我的业务对象的集合属性。

虽然这一切都很好,但在创建集合时必须连接额外的逻辑,并且使用默认构造函数无法达到目的。本质上,我正在建立父子关系并连接一些事件,以便它们从子项传递到父项。

我想做的是让 AutoMapper 简单地将 DTO 集合中的子对象映射到我的 BO 上的现有集合。换句话说,跳过创建新集合的过程,而只需使用业务对象已有的集合。

有什么办法可以轻松实现这一点吗?!?!?

UPDATE

也许一个更好的问题和更简单的解决方案是,是否可以定义 AutoMapper 在实例化时传递给集合的参数?我的子集合定义如下:

public class ChildCollection : Collection<ChildObjects>
{
    public ChildCollection(ParentObject parent) { Parent = parent; }
}

如果我可以配置 AutoMapper 使用此构造函数并传入正确的对象,那就完美了!

另一个更新

为了清楚起见,以下是问题空间中的其他类:

public class ParentObject
{
    private ChildCollection _children;

    public ChildCollection Children
    {
        get
        {
            if (_children == null) _children = new ChildCollection(this);

            return _children;
        }
    }
}

public class ParentDTO
{
    public ICollection<ChildDTO> Children { get; set; }
}

public class ChildDTO
{
    public String SomeProperty { get; set; }
}

我这样配置 AutoMapper:

Mapper.CreateMap<ParentDTO, ParentObject>();
Mapper.CreateMap<ChildDTO, ChildObject>();

通过这种方式,我必须向 ParentObject 中的 Children 属性添加一个 setter,并向 ChildCollection 添加一个默认(无参数)构造函数。虽然我可以解决定义父子关系的需要,但期望 AutoMapper 支持在创建子集合时配置映射以使用特定构造函数似乎是合乎逻辑的。像这样的东西:

Mapper.CreateMap<ParentDTO, ParentObject>()
    .ForMember(obj => obj.Children, opt.MapFrom(dto => dto.Children))
    .ConstructUsing(col => new ChildCollection(obj));

请注意,我传递了对“object”的引用,它是正在映射的父对象实例。


事实证明,答案一直就在那里。 UseDestinationValue 选项正是我想要的。

此选项指示 AutoMapper 使用目标对象上的现有属性并将任何子属性或集合项映射到该对象,而不是创建新的代理对象。

所以,这就是我在应用程序中需要做的所有事情:

Mapper.CreateMap<ParentDTO, ParentObject>()
    .ForMember(obj => obj.Children,
           opt.UseDestinationValue());

而且,瞧!现在,我可以使用父引用实例化子集合,并在将每个项目添加到集合中时将引用设置回父集合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoMapper 在映射子对象时传递父引用 的相关文章

  • 哪个更快:清除集合或实例化新集合

    我的代码中有一些通用列表 其中有数十或数百个元素 有时我需要用其他对象重新填充此列表 所以问题是 调用什么会更快Clear 方法或创建一个new List
  • C# 中具有字符串键类型的不区分大小写字典

    如果我有一个Dictionary
  • Jq:如何将子成员移至父成员?

    考虑以下 json a b c 1 d 2 如何将 b 的所有属性移至父级 a 下 a c 1 d 2 b 对于这种特殊情况 您可以这样做 jq a b b input json 这里我们正在更新对象a与原始内容b替换为空对象并将其与原始内
  • 如何在 C# 中使用键对 NameValueCollection 进行排序?

    我编写了以下代码 它也有效 但我想知道它们是否比这更好 NameValueCollection optionInfoList if aSorting optionInfoListSorted new nameValueCollection
  • JPA @OrderBy() 通过关系表

    我需要一些有关 JPA 框架的帮助 我读过一些关于这个主题的 某种程度上 的答案 但我无法得出任何结论 首先这是我正在使用的设计示例 BusinessObject public class ClassA Column name ID nul
  • 在 Plone 4 的集合视图中扩展表列

    集合提供了一个选项来选择要在集合的表视图中显示的列 我们使用 archetypes schemaextender 通过两个字段扩展大多数内容类型 预告图像和预告文本 有没有一种合理的方法来扩展可用表列的列表 有没有一种方法可以在集合的表格视
  • 从 HashMap 条目列表中删除重复项

    我有一个List
  • 为什么Scala语言中的++:运算符这么奇怪?

    我正在使用 运算符来获取两个集合的集合 但是我使用这两种方法得到的结果不一致 scala gt var r Array 1 2 r Array Int Array 1 2 scala gt r Array 3 scala gt r res2
  • 实体框架以错误的顺序插入子对象

    Question 为什么 EF 首先在它所依赖的对象 TimesheetActivity 之前插入具有依赖项的子对象 PersonnelWorkRecord 另外我有哪些纠正这个问题的选择 ERD 简化 This is predefined
  • 如何统计List中某个元素出现的次数

    我有一个ArrayList Java的Collection类 如下 ArrayList
  • 在另一个类中使用一个类对象?

    我正在用 c 制作应用程序 在该应用程序中 我有一个类DataCapture cs 在同一个应用程序中 我有另一个类Listner cs 在 Listner cs 类中 我想使用以下对象DataCapture cs不创建新对象DataCap
  • 从 HashMap 中查找对象键

    我有一个 HashMap 其键作为我自己的对象 键作为 String 的 ArrayList 有没有一种方法可以从映射中获取与另一个对象相同的关键对象 而无需迭代映射 请注意 我的对象已经实现了 equals 和 hashcode 并且它只
  • Java 的自动映射器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 与嵌套泛型集合的混淆

    请帮助我理解为什么add1 and add4 报告错误以及原因add2 and add3 不 具体来说 请举例说明如果编译器允许其中每一个进行编译 则会产生不良后果的示例 class InnerTypeConfusion interface
  • Firestore OncompleteListener [重复]

    这个问题在这里已经有答案了 我想看看这段代码的执行有什么错误 当我编译它时 它只返回 log 1 3 2 的值 并且我希望 log2 在 3 之前 Log d 1 antes de validar DocumentReference doc
  • 如何使用 Java 中的 Web 服务(例如 Axis2)发送复杂对象的数组或集合?

    我对 SOAP Web 服务还比较陌生 虽然我完成了一些较小的 Web 服务项目 但我偶然从来不需要返回 或用作参数 复杂 对象的数组或集合 当我尝试这样做时 根据我的 SOAP 绑定风格 我会得到不同的奇怪行为 当我使用RPC 文字 我可
  • Autofac 3 和 Automapper

    有谁知道使用 Autofac 设置 Automapper 的综合指南 我对两者都是新手 但我已经使用过静态 Mapper 类 但是我希望能够模拟和注入 IMappingEngine 并创建一个设置所有映射的配置 到目前为止 我看过的所有指南
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • Dart - 何时在集合上使用 Collection-For-In 与 .Map()

    collection for in 操作和 map 方法都可以返回对先前集合中的元素的一些操作 是否有任何理由更喜欢使用其中一种而不是另一种 var myList 1 2 3 var alteredList1 for int i in my
  • 如何把父母和孩子联系起来?

    有两个简单的类 一个只有parent属性 并且两者兼而有之parent and children属性 这意味着同时具备两者的人parent and children继承自唯一的parent 这是只有parent属性 我们就这样称呼它吧Chi

随机推荐

  • Magento V1.7 网格视图 - 添加制造商属性以查看

    On 这一页 http www foxtrotgear com index php tactical gear equipment html mode grid我想在商品名称的正下方添加制造商名称 但似乎无法使其正常工作 尝试了很多建议 但
  • 阿格达。冒号之前/之后的参数

    定义数据类型时 我可以在冒号之前 传递 一些参数 data Image A B Set f A B B Set where im f A B x A Image f f x 但出于未知原因 我似乎无法在函数声明中执行此操作 exIm A B
  • MySQL:在同一个 MySql 实例上克隆 MySQL 数据库

    我想编写一个复制当前数据库的脚本sitedb1 to sitedb2在同一个 mysql 数据库实例上 我知道我可以将 sitedb1 转储到 sql 脚本 mysqldump u root p sitedb1 gt db name sql
  • 文本渲染器。如何使用尾省略号渲染多行文本?

    我如何呈现这样的文本 简单列表视图 尝试这样的代码不会出现省略号 TextRenderer DrawText listGraphics anItem Text GetItemFont anItem textRec Color FromKno
  • Java代码中如何标记忽略返回值?

    C 约定标记该函数仅因副作用而调用 并且在这个特定的调用中我们对返回值不感兴趣 void getSomethingAndDoAction Java中有类似的东西吗 The 容易出错的项目 https errorprone info has
  • 将音频输出重定向到手机扬声器,将麦克风输入重定向到耳机

    是否可以将音频输出重定向到手机扬声器并仍然使用麦克风耳机输入 如果我将音频路由重定向到手机扬声器而不是耳机 它也会重定向麦克风 这是有道理的 但我似乎不能仅仅重定向麦克风输入 有任何想法吗 这是我用来将音频重定向到扬声器的代码 UInt32
  • 在Xamarin中动态添加入口控件

    我想获取XML 输入控制 from API 可用于JSON Entry 控件的所有属性均采用 JSON 格式 我想将它们添加到 xml页面并获取它们的值 当用户进入应用程序时 ViewModel 通过数据绑定 UPDATE 根据答案更新代码
  • 如何自定义 Eclipse 的 getter 和 setter 生成?

    如何配置 Eclipse 来生成带有参数变量前缀的 getter 和 setter Example private String someVariable public void setSomeVariable String aSomeVa
  • 有没有适用于 Android 传真的本机应用程序?

    我想开发一个传真应用程序 我在谷歌上搜索并找到了一些链接 用于在android上开发传真应用程序的应用程序 但是我想使用android的本机应用程序开发应用程序 在一些网站上 我读到免费的网络服务可用于发送 使用Android移动应用程序接
  • Rcpp 公开类的序列化

    我在 R 包中编写了一个 C 类 并将其暴露给 R 命名空间RCPP EXPOSED CLASS and RCPP MODULE 一切都很好 gt index An object of class Index Slot index C ob
  • 我使用 PyPy 是否错误?它比标准 Python 慢 10 倍

    我听说过有关 PyPy 的好消息 特别是我听说它非常快 这让我想知道它是否可用于我的嵌入式项目 我下载了PyPy 2 6 for my Windows 7PC 并将内容解压到一个目录中 我编写了一个小型测试程序来进行基准测试 import
  • 有关电话号码的信息

    node js 是否有任何库可以接收电话号码 任何格式 将其转换为默认格式 并告诉我有关该号码的信息 例如 国家 地区 城市等 我不知道 我也搜索过npm 注册表 http search npmjs org 谷歌有库电话号码 http co
  • 如何将左右系统键发送到SendKeys.Send()?

    我主要研究了几个选项 Sendkeys Send 用于右 alt 键 有什么替代方案吗 https stackoverflow com questions 9330498 sendkeys send for right alt key an
  • 我想在所有内容图像上应用 css class(bootstrap) .img-responsive

    我正在 bootstrap 的帮助下开发一个 Wordpress 主题 因此我手动将案例应用于所有内容图像 如下所示 img src images logo 03 png class img responsive 有没有办法自动应用相同的类
  • std::function 复制参数?

    My code include
  • C++中如何设计一个可以容纳任意类型函数的容器?

    我希望服务器支持注册任何功能 可能是这样的 server register Add int a int b cout lt lt a b lt lt endl server register Echo string str cout lt
  • 通过 Facebook 分享 Android 果冻豆的意图

    我想通过 Facebook 分享 Android jelly bean 的一些图像和文本 它适用于除 Android 果冻豆之外的所有设备 任何人请帮助我如何解决这个问题 my code Intent shareIntent new Int
  • ASPX 页面中“当前上下文中不存在该名称”

    我看过类似的问题 1 https stackoverflow com questions 706603 the name controlname does not exist in the current context 2 https s
  • URL 的编码参数

    我有一个正在构建 URL 的 Silverlight 应用程序 此 URL 是对基于 REST 的服务的调用 该服务需要一个代表位置的参数 位置的形式为 城市 州 为了构建此 URL 我调用以下代码 string url http www
  • AutoMapper 在映射子对象时传递父引用

    我正在尝试使用 AutoMapper 将从 Web 服务接收到的一些 DTO 数据契约 对象映射到我的业务对象中 根 DTO 对象包含子对象的集合 我的业务对象还有一个子业务对象的子集合 为了让 AutoMapper 工作 我必须在业务对象