Automapper 不会忽略错误的属性
Automapper not ignoring properties with an error
我们有一个复杂的对象 User,其中包含一堆其他对象的列表。
User
List<User> Subordinates {get; set;}
etc....
当我们运行代码时,一些属性出错是完全可以接受的,因为与数据库的连接已经关闭,我们没有得到 say Subordinates。
在 AutoMapper 中,我在尝试将用户 class 映射到另一个 Class 时遇到错误。
所以下属的错误属性是;
'((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 忽略那些出错的属性。
根本原因是数据延迟加载到您的实体中,通常在 using(var context = new MyDbContext())
块内,并且 AutoMapper
尝试将卸载的属性映射到上下文块之外,触发加载,因此System.ObjectDisposedException
因为上下文已经被释放。
您需要做的是NOT忽略加载失败的属性,但确保在映射之前正确加载所有属性。我建议你阅读 this guidance,它展示了如何将控制器、实体和 dbcontext 放入正确的层中。
我们有一个复杂的对象 User,其中包含一堆其他对象的列表。
User
List<User> Subordinates {get; set;}
etc....
当我们运行代码时,一些属性出错是完全可以接受的,因为与数据库的连接已经关闭,我们没有得到 say Subordinates。
在 AutoMapper 中,我在尝试将用户 class 映射到另一个 Class 时遇到错误。
所以下属的错误属性是;
'((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 忽略那些出错的属性。
根本原因是数据延迟加载到您的实体中,通常在 using(var context = new MyDbContext())
块内,并且 AutoMapper
尝试将卸载的属性映射到上下文块之外,触发加载,因此System.ObjectDisposedException
因为上下文已经被释放。
您需要做的是NOT忽略加载失败的属性,但确保在映射之前正确加载所有属性。我建议你阅读 this guidance,它展示了如何将控制器、实体和 dbcontext 放入正确的层中。