使用Automapper将对象嵌套到一个对象

时间:2015-12-11 16:22:17

标签: c# asp.net-mvc entity-framework-6 automapper

要求将名称(A类)和电话号码(B类)映射到具有Name和PhoneNumber的C类。一个人(姓名)可以有多个电话号码。

public class A
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual IList<B> B { get; set; }
}

public class B
{
    public int A_ID { get; set; }
    public string PhoneNumber { get; set; }
}

public class C
{
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
}

从数据库中获取一个类(具有B)详细信息,并且需要将其映射到C类。

public class Activity
{
    public IList<C> GetContacts(string name)
    {
        using (ModelEntities ctx = new ModelEntities())
        {
            Mapper.CreateMap<A, C>();
            Mapper.CreateMap<B, C>();

            var result =
                ctx.A.SingleOrDefault(ss => ss.Name == name);

        }
    }
}

任何人都可以帮助我使用Automapper进行地图制作吗?

由于

1 个答案:

答案 0 :(得分:1)

AutoMapper无法从单个实例映射到多个实例。它必须是实例实例或可枚举为可枚举。我能看到的最佳前进方法是简单地将IList<B>映射到IList<C>,然后重新填充Name属性。有点像:

var c = Mapper.Map<IList<C>>(a.B);
c.ToList().ForEach(m => m.Name = a.Name);

但是,除非你的映射比这更复杂,否则AutoMapper是过度的。你可以这样做:

var c = a.B.Select(b => new C { Name = a.Name, PhoneNumber = b.PhoneNumber });