【问题标题】:ValueInjector with Dynamic Proxy objects具有动态代理对象的 ValueInjector
【发布时间】:2012-03-25 16:44:36
【问题描述】:

我有一个带有服务层的标准存储库模式,我需要映射一个名为 Game 的 POCO 对象:

public class Game
{    
    public int Id { get; set; }
    public int GameTypeId { get; set; }
    public int GameStateId { get; set; }
    public int? PreviousGameId { get; set; }
    public DateTime EndOn { get; set; }
    public DateTime StartOn { get; set; }
}

将其映射到具有名为 GameId 的成员的视图模型。所以 Id > GameId

但是,当我创建我的映射约定时,对象的末尾会附加一个看起来像 GUID 的东西。

如何在不从动态代理映射到 POCO 的情况下让值注入器正确映射这些 POCO 对象。或者这是不可能的?

【问题讨论】:

  • 您应该显示模型和视图模型的完整代码,并在 M 中显示源属性,在 VM 中显示目标属性

标签: c# entity-framework poco valueinjecter


【解决方案1】:

我最终关闭了代理生成和延迟加载,现在我只是渴望加载所有内容

【讨论】:

    【解决方案2】:

    今天在实体框架动态代理中看到了同样的问题。这是在不禁用代理的情况下使 ValueInjecter 工作的方法。

    我使用 Mapper.AddMap 创建了一个基于非代理类的自定义地图。在运行时,我对 Mapper.Map 的调用与我的地图不匹配,因为它收到了代理类。

    var customerInput = Mapper.Map<CustomerInput>(customer); //runs default map
    

    当我使用输入和输出类型调用 Mapper.Map 时,它起作用了!

    var customerInput = Mapper.Map<Customer, CustomerInput>(customer); //runs custom map
    

    【讨论】:

      【解决方案3】:

      在映射之前尝试将代理显式转换为底层 POCO 的类型。

      【讨论】:

      • 为 Mapper.Map 投射输入对象不会导致选择自定义地图。 Map 仍然看到先前的类型。
      猜你喜欢
      • 2013-07-28
      • 2012-06-10
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多