2011-09-29 3 views
1

MVC3 응용 프로그램의 ViewModel 및 AutoMapper 디자인 전략과 함께 EF를 사용하고 있습니다.ViewModel CRUD 페이지가있는 ASP.NET MVC3 엔터티

내가 현재하고있는 CRUD 페이지를 만드는 데보다 효율적인 방법이 있는지 궁금합니다.

내 현재 프로세스가 포함됩니다

  • 엔티티
  • 만들기 복사 붙여 넣기는 다음을 통해 컨트롤러를 만들기 컨텍스트 목록
  • 에 엔티티를 추가
  • 이 아닌 필수 항목을 삭제를 통해 뷰 모델 만들기 Visual Studio 2010 컨트롤러 마법사 페이지를 만듭니다.
  • Entity Framework를 사용하여 읽기 쓰기 작업 및보기로 컨트롤러 템플릿을 선택합니다.
  • 모델을 내 엔터티 대신 내 ViewModel로 선택합니다.
  • 적절한 컨텍스트를 선택합니다.

return View(db.BlockedUserViewModels.ToList());

로 :

  • 지금 생각 나는 부분 부분 개선 될 수있다, 나는 AutoMapper 변화하는 엔티티/뷰 모델 디자인 패턴을 사용하는 모든 CRUD 방법을 다시 작성해야 :

    IList<BlockedUser> blockedUsers = db.BlockedUsers.ToList(); 
    IList<BlockedUserViewModel> blockedUserVMs = AutoMapper.Mapper.Map<IList<BlockedUser>, IList<BlockedUserViewModel>>(blockedUsers); 
    return View(blockedUserVMs); 
    
    • 나는 각 컨트롤러 CRUD 옵션과 같은 [권한 부여] 및 역할 권한을 추가해야합니다.

    작업량이 너무 많습니다. 더 나은 해결책이 있기를 바라고 있습니다. (나는 Python/Django에서 한 줄의 코드로 강력한 CRUD 페이지를 만들 필요가있다.)

  • 답변

    2

    는 소리가 난다. 당신이 그것을 반복 할 필요가 없습니다

    IList<BlockedUser> blockedUsers = db.BlockedUsers.ToList(); 
    IList<BlockedUserViewModel> blockedUserVMs = AutoMapper.Mapper.Map<IList<BlockedUser>, IList<BlockedUserViewModel>>(blockedUsers); 
    

    이 당신의 CRUD 로직을 유지하는 장소로 컨트롤러 빛과 행동을 유지합니다 : 그럼 당신은 각 시간 대신

    var model = _service.GetBlockedUsers(); 
    

    를 호출해야 어디에나.

    컨트롤러의 모든 작업에 적용되는 경우 컨트롤러에 [Authorize] 특성을 추가 할 수도 있습니다.

    +0

    좋은 지적으로, 필자는이 패키지를 찾기 위해 쉬운 해결책을 간과했다. 이러한 유틸리티 메소드를 컨텍스트 내부에 두는 것이 적절합니까? 컨트롤러 [인증] 속성에 대한 팁을 가져 주셔서 감사합니다. 불행히도 일관성이 없습니다. – Valchris

    +0

    구현에 따라 다릅니다. 엔티티에서 리포지토리 패턴을 사용하여 CRUD 작업을 관리하므로 서비스는 엔티티를 연관된 뷰 모델에 매핑하는 저장소 주위의 래퍼입니다. – shuniar

    +0

    당신의 설명이 무엇인지에 대한 튜토리얼/예를 알고 있습니까? 저장소 기능에 대한 언급을 읽었지만 추가 된 복잡성 계층의 이점을 완전히 이해하지 못했습니다. – Valchris

    1

    이것은 실제로 얼마나 고통 스러운가에 달려 있지만, 항상 MVC 스캐 폴딩을 사용할 수있다. Nuget과 Steven Sanderson이 썼습니다. 장기간에 걸쳐 투자하면 도움이 될 수 있지만, 그것이 자신에게 적합한 지 알아 내야합니다. 당신이 서비스를 추가하고 컨트롤러에 주입 할 수처럼

    http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/

    +0

    전에 간단히 살펴 봤는데, 확실히 찾고있는 일을 할 수있는 것 같지만 처음부터 스캐 폴더를 작성해야합니다. AutoMapper로 스캐 폴딩 작업을 수행하고 코드를 제공 한 사람이 있어야합니다! – Valchris

    +0

    아마도 있을지 모르지만 자신의 글을 쓰면 다른 사람 대 다른 사람의 차이점을 쉽게 처리 할 수 ​​있습니다. –