2016-10-22 3 views
0

У меня есть сложная модель домена, которая имеет много отношений с другими объектами в системе.AutoMapper - flatten модель для просмотра модели. Один для многих отношений

Для редактирования этой модели я хочу создать модель представления, которая упрощает вещи. Я хочу разбить модель на более мелкие логические блоки с экранами редактирования для каждой части, а не пытаться представить всю модель на одном экране.

В модели предметной области, где у меня есть один является для многих отношениях он представлен, как это:

public partial class CbItemsContent 
{ 

    public CbItemsContent() 
    { 
     this.cbItemsContentRegulators = new HashSet<cbItemsContentRegulator>(); 
    } 

    public int ItemContentId { get; set; } 
    public int ItemID { get; set; } 
    ...... 

    public virtual CbItem CbItem { get; set; } 
    public virtual ICollection<cbItemsContentRegulator> cbItemsContentRegulators { get; set; } 
} 

cbItemsContentRegulator другой набор объектов, которые принадлежат CbItemsContent (модель, показанная выше)

Я хотел бы заменить Коллекция cbItemsContentRegulators в моей модели с упрощенной ViewModel называется ItemContentRegulatorsViewModel так:

public class ItemContentRegulatorsViewModel 
{ 
    public int ItemContentId { get; set; } 

    public int[] RegulatorIds { get; set; } 
} 

, который уменьшает связь с родительским идентификатором ItemContent и массивом int, если идентификаторы регулятора

- это то, что я пытаюсь сделать возможным?

Как Карта Моей коллекции CbItemsContentRegulators к междунар [] ИДС

ответ

0

Предполагая, что вы используете Entity Framework, вы должны изменить модель представления на

public class ItemContentRegulatorsViewModel 
{ 
    public int ItemContentId { get; set; } 
    public IList<int> RegulatorIds { get; set; } // IList 
} 

Нет вы можете определить отображение:

var profile = Mapper.CreateProfile("SomeName"); 
profile.CreateMap<CbItemsContent,ItemContentRegulatorsViewModel>() 
     .ForMember(dest => dest.RegulatorIds, 
      m => m.MapFrom(src => src.cbItemsContentRegulators.Select(c => c.RegulatorId))); 

Теперь вы можете использовать его в запросе, как:

context.CbItemsContents.ProjectTo<ItemContentRegulatorsViewModel>() 

С RegulatorIds как массив это вызовет исключение, которое ToArray не распознается.

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