2015-12-11 2 views
0

Имейте требование сопоставить имя (класс A) и номер телефона (класс B) с классом C, который имеет имя и номер телефона. У человека (имени) может быть более одного номера телефона.Вложенные объекты для одного объекта с использованием Automapper

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?

Благодаря

+0

'Человек (имя) может иметь более одного номера телефона' ... Помимо того, что вы не показываете никаких попыток, вы не описали, что должно произойти в этом сценарии. Класс 'C' ожидает один номер на одно имя. – Jonesopolis

+0

Класс C должен содержать все записи из db. Если у нас есть записи 1. Sam | 0786878768, 2. Сэм | 065765768, 3. Исаак | 8976897987, 4. Филипп | 232342, GetContacts должен получить все 4 записи. – Jack

+0

Это не имеет никакого смысла. Класс C не может предоставить все записи, 'IEnumerable ' возможно, но вы не можете, чтобы один экземпляр представлял несколько экземпляров. –

ответ

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 }); 
+0

Спасибо. Я попробую это. – Jack

Смежные вопросы