ASP.NET MVC & AutoMapper (Заполнить модель представления из объектов родительского и дочернего домена) - PullRequest
3 голосов
/ 07 февраля 2011

У меня есть следующие объекты doimain:

public class ComponentType
{
    public int ComponentTypeID { get; set; }
    public string Component_Type { get; set; }
    public string ComponentDesc { get; set; }
}

public class AffiliateComponentType
{
    public int AffiliateComponentID { get; set; }
    public int AffiliateID { get; set; }
    public ComponentType ComponentType { get; set; }
    public bool MandatoryComponent { get; set; }
    public bool CanBeBookedStandalone { get; set; }
    public int PreferenceOrder { get; set; }
}

Я получу СПИСОК AffiliateComponentType из БД с использованием NHibernate. Теперь мне нужно заполнить СПИСОК AffiliateComponentTypeView (View Model) из СПИСКА доменного объекта AffiliateComponentType. Как я могу добиться этого с помощью AutoMapper?

[Serializable]
public class AffiliateComponentTypeView
{
    public int ComponentTypeID { get; set; }
    public string Component_Type { get; set; }
    public string ComponentDesc { get; set; }
    public bool MandatoryComponent { get; set; }
    public bool CanBeBookedStandalone { get; set; }
    public int PreferenceOrder { get; set; }
}

Ответы [ 2 ]

2 голосов
/ 07 февраля 2011

Следующее сопоставление должно выполнить работу сглаживания вашей модели :

Mapper
    .CreateMap<AffiliateComponentType, AffiliateComponentTypeView>()
    .ForMember(
        dest => dest.ComponentTypeID,
        opt => opt.MapFrom(src => src.ComponentType.ComponentTypeID)
    )
    .ForMember(
        dest => dest.Component_Type,
        opt => opt.MapFrom(src => src.ComponentType.Component_Type)
    )
    .ForMember(
        dest => dest.ComponentDesc,
        opt => opt.MapFrom(src => src.ComponentType.ComponentDesc)
    );

, и если вы изменили свою модель вида следующим образом:

[Serializable]
public class AffiliateComponentTypeView
{
    public int ComponentTypeComponentTypeID { get; set; }
    public string ComponentTypeComponent_Type { get; set; }
    public string ComponentTypeComponentDesc { get; set; }
    public bool MandatoryComponent { get; set; }
    public bool CanBeBookedStandalone { get; set; }
    public int PreferenceOrder { get; set; }
}

AutoMapper будет автоматически выполнять выравнивание, используя стандартные соглашения, поэтому все, что вам нужно:

Mapper.CreateMap<AffiliateComponentType, AffiliateComponentTypeView>();

Будет только небольшая проблема со свойством Component_Type, так как оно конфликтует с соглашением по умолчанию именования AutoMapper, поэтому вам может потребоватьсячтобы переименовать его.

Как только вы определите отображение, вы можете отобразить:

IEnumerable<AffiliateComponentType> source = ...
IEnumerable<AffiliateComponentTypeView> dest = Mapper.Map<IEnumerable<AffiliateComponentType>, IEnumerable<AffiliateComponentTypeView>>(source);
1 голос
/ 07 февраля 2011

Где-то в вашем приложении у вас будет блок кода, который настраивает AutoMapper, так что я предполагаю, что у вас будет блок, который выглядит так:вернув свою модель из nHibernate, вы создадите свою модель представления следующим образом:

var model = Session.Load<AffiliateComponentType>(id);
var viewModel = Mapper.Map<AffiliateComponentType, 
    AffiliateComponentTypeView>(model);
if (model.ComponentType != null)
    Mapper.Map(model.ComponentType, viewModel);

Надеюсь, что это приведет вас к цели!

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