2010-12-01 1 views
1

나는 automapper가 작동하도록 설정 한 모든 것을 가지고있다. 애트리뷰트가 잘 작동하고 있습니다. DTO를 올바르게 채우고 올바르게 채 웁니다. 내가 가진 automapper, On 컨트롤러에 작업을 생성합니다. 혼란스러운

[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 내 엔티티 객체이며, 구현 및 사방 사용자 객체를 사용을 통해 인터페이스 인 리포지토리에 을 전달 사용자 개체에 설정처럼 내 컨트롤러 만들기 조치 보인다.

내가하고 싶은 것은 위의 동일한 코드를 사용하는 경우와 같습니다.

[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을 통과 할 때입니다 문제는 인터페이스에 UserCreateDTO를 대체 할 내가 모든 코드를 변경할 수 없습니다

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

    User GetUserById(Guid id); 

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

    void Save(); 
} 

아래 같은 인터페이스가되는 것보다 통과되면 Repository 및 UserEditDTO/UserShowDTO가있는 경우 어떻게됩니까? 이 문제를 어떻게 해결할 수 있습니까? 나는 가능한 한 많이 설명했다.

답변

1

만들기를 호출하기 전에 사용자 개체로 다시 매핑하지 않는 이유는 무엇입니까? 속성을 사용할 필요가 없습니다. 지도를 직접 호출 할 수 있습니다.

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

지도 호출 후에 디버거가 중지되도록 설정하고 값이 올바르게 복사되었는지 확인하십시오.

+0

위의 조치 방법에 대한 예를 들어주세요. 감사하게 생각합니다. 나는 automapper에 정오이다. – Pirzada

+0

내 대답이 업데이트되었습니다. 도움이 필요하면 다시 말하십시오. – rboarman

+0

AutoMapper.Profile을 상속하고 Configure를 재정의하는 클래스를 직접 생성하여 응용 프로그램의 한 곳으로지도를 만들 수 있습니다. – CRice