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,如何保持映射对象之间的引用? 的相关文章

  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装

随机推荐

  • 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 类相互引用 但映射过程