1

所以我有这个;

public class Parent
{
  public string SomeProperty { get; set; }
  public Child ChildProperty { get; set; }
}
public class Child
{
  public string ChildProperty { get; set; }
  public string OtherChildProperty { get; set; }
}
public class Flat
{
  public string SomeProperty { get; set; }
  public string ChildProperty { get; set; }
}

然后我这样做;

Flat source = new Flat { SomeProperty = "test", ChildProperty = "test" };
Parent dest = GetParentFromDataContext();

Mapper.Map<Flat,Parent>(source,dest);

然后我的期望是它dest.ChildProperty.OtherChildProperty仍然设置为从数据上下文中提取时的状态。但是我正在努力做到这一点。

如果我CreateMap是这样,那么我会得到一个“必须解决到顶级成员”的异常;

Mapper.CreateMap<Flat,Parent>()
  .ForMember(dest => dest.Parent.ChildProperty.ChildProperty,
    options => options.MapFrom(source => source.ChildProperty))
  .ForMember(dest => dest.Parent.ChildProperty.OtherChildProperty,
    options => options.Ignore());

但是,如果我执行以下操作,则new Child {}替换Child从数据上下文中提取的内容基本上是清除OtherChildProperty

Mapper.CreateMap<Flat,Parent>()
  .ForMember(dest => dest.Child
    options => options.MapFrom(source => new Child { ChildProperty = source.ChildProperty } ));

我如何映射它并保留我希望忽略的子属性?

4

2 回答 2

1

您正在尝试使用 automapper 反转展平过程,而这对这项工作来说是错误的工具。请参阅这个SO 问题。

于 2012-07-18T09:15:27.503 回答
1

不优雅,但这行得通;

Mapper.CreateMap<Flat,Parent>()
  .ForMember(dest => dest.ChildProperty, options => options.Ignore());
Mapper.CreateMap<Flat,Child>()
  .ForMember(dest => dest.OtherChildProperty, options => options.Ignore());

Mapper.Map<Flat,Parent>(source,dest);
Mapper.Map<Flat,Child>(source,dest.Child);
于 2012-07-19T07:07:23.503 回答