【问题标题】:Automapper not ignoring properties with an errorAutomapper 没有忽略错误的属性
【发布时间】:2026-01-17 16:00:02
【问题描述】:

我们有一个复杂的对象用户,其中包含一堆其他对象的列表。

User
  List<User> Subordinates {get; set;}
  etc....

当我们运行代码时,一些属性出错是完全可以接受的,因为与数据库的连接已经关闭,我们没有得到说下属。

在 AutoMapper 中,尝试将 User 类映射到另一个类时出现错误。

所以下属属性的错误是;

'((System.Data.Entity.DynamicProxies.User_26F7582000F06E0D5B307573194E69014E40D1C586E95D4E4932757C1F4DE360)((System.Data.Entity.DynamicProxies.WorkflowTask_DEDE69BC0D3CAFD0CCDA62406BC48A7A7CCBD5E8B13369FF5E761B64348A767C)thisTask).User).Subordinates' threw an exception of type 'System.ObjectDisposedException'

AutoMapper 抛出的错误是;

{"Error mapping types.\r\n\r\nMapping types:\r\nWorkflowTask -> jsonTask\r\nDataRepository.WorkflowTask -> Tasks.Models.jsonTask\r\n\r\nType Map configuration:\r\nWorkflowTask -> jsonTask\r\nDataRepository.WorkflowTask -> Tasks.Models.jsonTask\r\n\r\nProperty:\r\nUser"}

然后在InnerException;

{"Error mapping types.\r\n\r\nMapping types:\r\nUser -> jsonUser\r\nDataRepository.User -> Tasks.Models.jsonUser\r\n\r\nType Map configuration:\r\nUser -> jsonUser\r\nDataRepository.User -> Tasks.Models.jsonUser\r\n\r\nProperty:\r\nSubordinates"}

我只需要 AutoMapper 来忽略那些错误的属性。

【问题讨论】:

    标签: c# automapper automapper-4


    【解决方案1】:

    根本原因是数据被延迟加载到您的实体中,通常在 using(var context = new MyDbContext()) 块内,AutoMapper 尝试将未加载的属性映射到上下文块之外,触发加载,因此 System.ObjectDisposedException 因为上下文已经处置了。

    您需要做的是忽略无法加载的属性,但要确保在映射之前正确加载了所有属性。我建议你阅读this guidance,它展示了如何将控制器、实体和 dbcontext 放入正确的层中。

    【讨论】:

    • 谢谢你,是的,我会得出同样的结论。我遇到的问题是我“不需要”加载实体,我当然不想将所有这些都传递回视图。我只想传回所需的内容,在这种情况下,视图不需要下属。只是试图减少传回的金额。感谢您的链接,我也会给它一个阅读。
    • @griegs 如果视图中不需要这些属性,您应该从相应的视图模型中删除它们。如果一个视图需要它们而另一个视图不需要它们,您应该创建不同的视图模型而不是共享一个视图模型。
    • 是的,好点!谢谢丹尼,这就是我要做的。我为此走上了一条非常黑暗的道路,只需要有人来照亮这种愚蠢。谢谢。 +1
    最近更新 更多