TypeName的AutoMapper属性在Source中以Tbl开头,属性在目标中以FK开头

时间:2014-04-09 10:23:19

标签: automapper

我有自动转换属性的问题,其中TypeName以源代码中的Tbl开头,属性以目标中的FK开头,但发生此错误: 缺少类型映射配置或不支持的映射。 Tbl_Child - > Int32 Tbl_Child - > System.Int32目标路径:Destination.FK_Child.FK_Child源值:Tbl_Child

代码是:

public class Source
{
    public Tbl_Child Child { get; set; }

    public string SourceName { get; set; }
}

public class Tbl_Child
{
    public int ID_Child { get; set; }
    public string ChildName { get; set; }
}

public class Destination
{
    public int FK_Child { get; set; }
    public string ChildName { get; set; }
    public string SourceName { get; set; }
}

static void Main(string[] args)
{
    var src = new Source()
        {
            Child = new Tbl_Child()
                {
                    ChildName = "ch",
                    ID_Child = 1
                },
            SourceName = "src"
        };

    AutoMapper.Mapper.CreateMap<Source, Destination>();
    var dest = AutoMapper.Mapper.Map<Source, Destination>(src);

    Console.ReadKey();
}

我测试AutoMapper版本2.0.0.0和3.1.1.0

1 个答案:

答案 0 :(得分:0)

开箱即用,Automapper能够映射属性中具有相同名称和flattening的属性。对于其他属性,您必须指定所需的映射。

例如,从Source.Child.ID_ChildDestination.FK_Child的映射将完成如下:

Mapper.CreateMap<Source, Destination>()
.ForMember(d => d.FK_Child, o => o.MapFrom(s => s.Child.ID_Child));

您可以链接所有自定义映射

Mapper.CreateMap<Source, Destination>()
.ForMember(d => d.FK_Child, o => o.MapFrom(s => s.Child.ID_Child))
.ForMember(d => d.ChildName, o => o.MapFrom(s => s.Child.ChildName));

在这种情况下,此映射应该足够了,但我认为在继续之前您可能需要read the wiki