AutoMapper,如何保持映射对象之间的引用?

2024-03-14

我使用 AutoMapper 将 UI 模型转换为 POCO,然后使用 DataContractSerializer 将其序列化为 XML,以便保留它们之间的引用。

问题来了,在绘制地图时,这些实体之间的引用丢失.

UI 类相互引用,但映射过程为每个引用创建新实例,因此原始关系被破坏:(

让我解释:

我有 2 个 Person 类型的实体

    Person 
    { 
        List<House> OwnedHouses 
    }

还有这 2 个物体

John谁拥有

  • House1

Will谁还拥有

  • House1

当 AutoMapper 正确映射每个 Person 时,但它也将 House1 映射为两个不同的实例时!!

所以我有两份 House1。约翰拥有他的 House1 (#1),威尔拥有他的 House1 (#2)。

他们不再有联系了。

有什么办法可以维持原来存在的关系呢?

Thanks.

编辑:实际上我所拥有的是这样的:

文档包含子文档列表。每个 ChildDocument 都有一个可设计列表(矩形、直线、椭圆...)和一个名为 ChildDocumentAdapter 的特殊可设计列表,其中包含另一个 ChildDocument。这就是麻烦了,它可以引用另一个ChildDocument。


如果我理解这个问题,那么您正在执行两个单独的映射操作 - 一个用于约翰,另一个用于威尔。

@Sunny 是对的。 AutoMapper 并不是为此而设计的。您拨打的每个电话Mapper.Map()通常独立于任何其他。通过使用 HouseListConverter 的同一实例,您可以获得在字典中缓存所有映射房屋的好处。但是您必须全局注册它,或者将其作为选项传递给您想要分组在一起的映射调用。这不仅仅是额外的工作,它还隐藏了转换器深处非常重要的实现细节。

如果您在一个操作中同时映射 John 和 Will,通过将它们放入一个集合中,输出将是您想要的,而不需要自定义转换器或解析器。

对于其他有类似问题的人来说,这可能是一个更简单的选择。

public void MapListOfPeopleWithSameHouse()
{
    Mapper.CreateMap<Person, PersonDTO>();
    Mapper.CreateMap<House, HouseDTO>();

    var people = new List<Person>();
    var house = new House() { Address = "123 Main" };
    people.Add(new Person() { Name = "John", Houses = new List<House>() { house } });
    people.Add(new Person() { Name = "Will", Houses = new List<House>() { house } });

    var peopleDTO = Mapper.Map<List<PersonDTO>>(people);
    Assert.IsNotNull(peopleDTO[0].Houses);
    Assert.AreSame(peopleDTO[0].Houses[0], peopleDTO[1].Houses[0]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoMapper,如何保持映射对象之间的引用? 的相关文章

  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 使用API​​隐藏程序标题栏

    它可以使用 c 和 windows api 删除窗口控制台标题栏 如果是的话如何 请 这个简单的应用程序隐藏并显示其所在控制台的标题栏 它会立即将控制台标题更改为 guid 以查找窗口句柄 然后 它使用 ToggleTitleBar 使用找
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 如何在不实例化一个类的情况下检查它是否继承了另一个类? [复制]

    这个问题在这里已经有答案了 假设我有一个如下所示的类 class Derived some inheritance stuff here 我想在我的代码中检查类似的内容 Derived is SomeType 但看起来像is运算符需要 De
  • Paradox 表 - Oledb 异常:外部表不是预期的格式

    我正在使用 Oledb 从 Paradox 表中读取一些数据 我遇到的问题是 当我将代码复制到控制台应用程序时 代码可以工作 但在 WinForms 中却不行 两者都以 x86 进行调试 我实际上只是复制代码 在 WinForms 应用程序
  • 是否有像 gccxml 这样的用于生成包装器的 C 标头解析器工具?

    我需要为一种新的编程语言编写一些 C 标头包装器 并且想要类似 gccxml 的东西 但不完全依赖 gcc 以及它在 Windows 系统上带来的问题 只需要读C而不是C 只要有完整的文档记录 任何格式的输出都可以 Linux Solari
  • 默认值 C# 类 [重复]

    这个问题在这里已经有答案了 我在控制器中有一个函数 并且我收到表单的信息 我有这个代码 public Actionresult functionOne string a string b string c foo 我尝试将其转换为类似的类
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 特征密集稀疏矩阵乘积是线程化的吗?

    我知道稀疏密集产品是根据文档进行线程化的 https eigen tuxfamily org dox TopicMultiThreading html https eigen tuxfamily org dox TopicMultiThre
  • 使用 AdHocWorkspace 会导致“不支持语言‘C#’”。

    在VS2015中使用Microsoft CodeAnalysis CSharp Workspaces的RC2 这段代码会抛出异常 var tree CSharpSyntaxTree ParseText var workspace new A
  • 从事务范围调用 WCF 服务方法

    我有这样的代码 using TransactionScope scope TransactionScopeFactory CreateTransactionScope some methodes calls for which scope
  • 将非算术类型作为参数传递给 cmath 函数是否有效?

    给定以下用户定义类型S具有转换功能double struct S operator double return 1 0 以及以下调用cmath http en cppreference com w cpp header cmath使用类型的
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 使用 foreach 循环和 XmlNodeList C# 将新节点附加到节点列表

    目前我处理的是这样的XML类型 XML FILE http 20drive google com open id 0By5BxgNi9eGcRldxcEZNU0FDTzQ 参考XML文件 我想检查一个节点 如果找不到该节点 我必须将该节点附
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • Automapper - CreateMap 被多次调用

    当我多次调用相同类型的 Mapper CreateMap 时会发生什么 它会重写之前的地图吗 如果是这样 如果我尝试创建已经创建的地图 是否可以使其抛出异常 当多次为同一组源和目标调用 Mapper CreateMap 时 根本不会发生任何
  • #pragma pack(16) 和 #pragma pack(8) 的效果总是相同吗?

    我正在尝试使用来对齐数据成员 pragma pack n http msdn microsoft com en us library 2e70t5y1 28v vs 100 29 aspx 以下面为例 include
  • 如何将对象转换为传递给函数的类型?

    这不会编译 但我想做的只是将对象转换为传递给函数的 t public void My Func Object input Type t t object ab TypeDescriptor GetConverter t ConvertFro
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能

随机推荐

  • Imshow 和 imwrite 在 matlab 中显示空白图像

    我正在尝试将图像存储在数组中以进行一些分析 当我循环该过程并将结果 imwrite 到各种文件中时 它会存储一个空白图像 与 imshow 相同 当我在控制台上打印图像数组时 这些值是它们应该的值 从 50 到 200 不等 这是我的代码出
  • 如何发出 SOAP 请求

    我正在 Android 中发出 SOAP 请求 我到底想要实现的是
  • WiX - 未定义的预处理器变量“$(var.SetupProject1.TargetDir)”

    我正在跟进本教程 http www paulsodimu co uk Post How To Create a Wix Installer For a Console Application创建 WiX 安装程序VS2017 Winform
  • 应用程序初始化非常慢:FirebaseApp初始化失败

    我知道关于这个问题 https stackoverflow com questions 37321728 firebaseinitprovider firebaseapp initialization unsuccessful但我认为这对我
  • 将本地 Nuget 包导入 Visual Studio 解决方案[重复]

    这个问题在这里已经有答案了 我的桌面上保存了一个 nuget 包文件 nupkg 我正在尝试将其纳入我的 Visual Studio 解决方案中 有谁知道如何做到这一点 请按照以下步骤操作 从 Visual Studio 打开项目的解决方案
  • 为什么 -O3 GCC Optimization 没有内联这个函数?

    在GCC编译器中 每当标记 O3时 编译器主要通过循环展开和函数内联进行优化 但是 当我编译具有以下函数的应用程序时 它没有执行函数内联 从 gprofing 和 gconving 中我可以注意到这个函数 comp t delay 不是从这
  • 如何使用默认的 Android 绘图

    使用默认 Android 可绘制对象时的最佳方法是什么 我应该使用android R drawable或者我应该复制项目中的可绘制对象并使用R drawable 在较新版本的 Android 中 某些默认可绘制对象被删除或调整大小是否存在任
  • 与主题属性的数据绑定

    我正在尝试新的 Android数据绑定库 https developer android com tools data binding guide html我想使用绑定设置工具栏的背景颜色 默认情况下 颜色应为 colorPrimary 来
  • 使用GCC编译时还需要使用-fPIC吗?

    在 gcc 目标机器上 当想要编译共享库时 需要指定 fpic 或 fPIC 才能正确工作 这是因为默认情况下使用绝对寻址 这适用于完全控制自己的地址空间的可执行文件 但不适用于共享库 共享库可以加载到可执行文件地址空间中的任何位置 然而
  • MVC / ASP.Net 记录级授权最佳实践

    有人对在 ASP Net MVC 网站中执行记录级授权同时保持关注点分离的好方法有什么建议吗 使用PrincipalPermission 您可以使用以下方法修饰方法 PrincipalPermission SecurityAction De
  • 关闭python请求连接

    import requests requests get path url timeout 100 在 python requests 库的上述用法中 一旦 requests get 运行完毕 连接是否会自动关闭 如果没有 我如何确定连接已
  • 如何使用 NSArray 作为全局常量?

    我正在使用一组Constant m文件 每个目标一个 用于为每个目标定义特定的内容 例如 Constants h extern NSString const kDatabaseFileName Constants m NSString co
  • 具有动态名称的嵌套对象属性[重复]

    这个问题在这里已经有答案了 上下文 我正在为我的应用程序设置编写一个 Redux 减速器 尽管这个问题不是特定于 Redux 的 它是一个嵌套对象 我想使用动态给出的属性名称来修改设置对象 Example const settings se
  • Linq to XML 嵌套查询

    我在使用 LINQ 查询时遇到问题 我有这个 XML
  • Laravel 获取配置变量

    In Laravel 5 0我已经设置了config app php this return languages gt en it 然后 我有一个刀片包装纸resources views frontend includes menus gu
  • 使用 ClassLoader getResourceAsStream() 的绝对路径

    我正在尝试使用 ClassLoader getResourceAsStream 我的目录结构如下 Project1 src main java webapp WEB INF MYLOC someprops properties For cl
  • 是否有相当于 BufferedReader.readLine() 的功能可以让我选择行尾字符是什么?

    Javadoc 的BufferedReader readLine http java sun com j2se 1 5 0 docs api java io BufferedReader html readLine says 一行被认为由任
  • Android - Firebase 身份验证失败

    我正在开发一个简单的应用程序 我按照下面的文档使用了 Firebase Auth https firebase google com docs auth android firebaseui authuser 0 top of page h
  • 监测脉冲的目的

    我只是想确保我理解这里的一些内容 如果我获得锁Monitor Enter or lock我需要打电话吗Pulse在释放锁之前 Monitor Enter Monitor Pulse Is that neccessary Monitor Ex
  • AutoMapper,如何保持映射对象之间的引用?

    我使用 AutoMapper 将 UI 模型转换为 POCO 然后使用 DataContractSerializer 将其序列化为 XML 以便保留它们之间的引用 问题来了 在绘制地图时 这些实体之间的引用丢失 UI 类相互引用 但映射过程