automapper, при создании действия на контроллере.Смущенный - PullRequest
1 голос
/ 01 декабря 2010

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

[HttpPost]
[AutoMap(typeof(User), typeof(UserCreateDTO))]
public ActionResult Create(User user)
{
    if (ModelState.IsValid)
    {
        _repository.Create(user);
        return RedirectToAction("Details", new { id = user.UserId });
    }

    return View("Edit", user);
}

У меня установлен DataAnnotation для объекта User, который является моим объектом Entity и передается в хранилище, которое является интерфейсом через реализацию и везде использует объект User.

То, что я хочу сделать, это как показано ниже, используя тот же код выше.

[HttpPost]
[AutoMap(typeof(User), typeof(UserCreateDTO))]
public ActionResult Create(UserCreateDTO userdto)
{
    if (ModelState.IsValid)
    {
         _repository.Create(userdto);

            return RedirectToAction("Details", new { id = userdto.UserId });
    }

    return View("Edit", userdto);
}

Вопрос: Моя DataAnnotation теперь на UserCreateDTO, чтобы ограничить то, что я хочу проверить.После того, как проверка прошла успешно, возникает проблема, когда я передаю userdto в метод Create, который не позволяет мне как объект User находится в интерфейсе, как показано ниже

public interface IUserRepository
{
    IQueryable<User> GetAllUsers();

    User GetUserById(Guid id);

    void Create(User user);
    User Edit(User user);
    void Delete(User user);

    void Save();
}

Я не могу изменить весь код для замены UserCreateDTO в интерфейсеи Репозиторий и Что, если у меня есть UserEditDTO / UserShowDTO.Как мне решить эту проблему?Я объяснил как можно больше.

1 Ответ

1 голос
/ 01 декабря 2010

Почему бы вам не отобразить объект пользователя перед вызовом Create?Вам не нужно использовать атрибуты.Вы можете вызвать Map напрямую.

Mapper.CreateMap<UserCreateDTO, User>();
var user = new user();
Mapper.Map<UserCreateDTO, User>(userdto, user);

Установите отладчик для остановки после вызова карты и проверьте, правильно ли скопированы значения.

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