ASP.NET MVC отображает содержимое класса с выпадающим - PullRequest
0 голосов
/ 18 июля 2011

В моем NHIbernate (модель базы данных) у меня есть это:

public class Pers {
    public int Id{ get; set ;}
    public string FirstName{ get; set ;}
    public string LastName{ get; set ;}
    public string City{ get; set ;}
    public int Age{ get; set ;}

    public Role Role{ get; set ;}
}

У меня есть некоторые dropwon (режим базы данных):

public class Role {
    public int Id{ get; set ;}
    public string NL{ get; set ;}
    public string FR{ get; set ;}
}

На мой взгляд, я хотел бы использоватьвыпадающий список и отображать некоторые записи (не все, в моем реальном классе гораздо больше свойств) Pers.Я создал класс Dto для Pers с полями, которые мне нужны:

public class PersDto {
    public int Id{ get; set ;}
    public string FirstName{ get; set ;}
    public string LastName{ get; set ;}

    public RoleDto RoleDto{ get; set ;}
}

public class RoleDto {
    public int Id{ get; set ;}
    public string NL{ get; set ;}
    public string FR{ get; set ;}
}

В контроллере:

Mapper.CreateMap<Role, RoleDto>();
myModel.RoleDto = Mapper.Map<Role, RoleDto>(roleListFromDB);

Mapper.CreateMap<Pers, PersDto>();
myModel.PersDto = Mapper.Map<Pers, PersDto>(persFromDB);

public class MyModel{
    public PersDto PersDto{ get; set ;}
    public RoleDto RoleDto{ get; set ;}
}

Это правильный путь?Или лучше сделать это с помощью создания PersDto:

public class MyModel{
    public string FirstName{ get; set ;}
    public string LastName{ get; set ;} 
    public RoleDto RoleDto{ get; set ;}
}

Возможно ли с помощью программы автоматического копирования копировать только некоторые поля, а не все?

Спасибо,

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Это правильный путь?

Нет, вы не должны вызывать Mapper.CreateMap<TSource, TDest> в контроллере. Этот метод должен вызываться только один раз за все время существования домена приложения, в идеале в Application_Start.

Вы можете написать профиль сопоставления:

public class PersonProfile : Profile
{
    protected override void Configure()
    {
        Mapper.CreateMap<Role, RoleDto>();
        Mapper.CreateMap<Pers, PersDto>();
    }
}

затем в Application_Start настройте эти профили:

Mapper.AddProfile(new PersonProfile());

и, наконец, в вашем контроллере используйте только метод Mapper.Map<TSource, TDest>:

var myModel = new MyModel();
myModel.RoleDto = Mapper.Map<Role, RoleDto>(roleListFromDB);
myModel.PersDto = Mapper.Map<Pers, PersDto>(persFromDB);
return View(myModel);
0 голосов
/ 18 июля 2011

Если ваш global.asax становится слишком большим, вы всегда можете разбить Команды для выполнения при запуске на другие классы / методы и использовать шаблон Command для вызова их из Global;включить отображение.

Мы используем отдельный файл отображения для наших отображений, а когда мы хотим игнорировать свойство, мы используем метод игнорирования в AutoMapper .

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