2017-03-12 3 views
0

Entity Framework 데이터베이스를 처음 사용하는 프로젝트를 만듭니다. 현재 .edmx이 생성되어 있으며 데이터 액세스 계층 프로젝트에 있습니다.저장 프로 시저를 사용하는 Entity Framework 데이터베이스의 첫 번째 접근 방식

GetAllTeam 함수 호출과 해당 복합 형식 호출 TeamResult을 작성했습니다. 필자는 함수 가져 오기를 호출하여 데이터 액세스 계층에서 복잡한 유형을 채우는 방식으로 비즈니스 계층에 데이터를 반환하려고합니다.

내 비즈니스 계층에서 복잡한 유형을 비즈니스 객체에 매핑하고 내 웹 API로 돌아와야합니다. 내 접근 방식이 올바른지 알고 싶습니다. 팀이라는 클래스의 엔터티라고하는 별도의 클래스 프로젝트를 만들고 복합 클래스 TeamResult을 사용하여 AutoMap을 만든 다음 비즈니스 계층으로 돌아가거나 TeamResult을 비즈니스 계층에 직접 보내야합니다.

이 접근법에 다른 문제가 있는지 알고 싶습니다.

참조하십시오

enter image description here

데이터 액세스 레이어 아래 코드 :

public class TeamRepository 
{ 
     public IEnumerable<TeamResult> GetAllTeam() 
     { 
      using (var mcrContext = new MCREntities1()) 
      { 
       return (from team in mcrContext.GetAllTeam() 

         select new TeamResult 
         { 
          TeamName = team.TeamName, 
          TeamDescription = team.TeamDescription, 
          Code = team.Code 

         }).ToList(); 
      } 
     } 
} 

비즈니스 로직 계층 :

public class TeamService : ITeamService 
{ 
     private readonly ITeamRepository _teamRepository; 

     public TeamService(ITeamRepository teamRepository) 
     { 
      _teamRepository = teamRepository; 
     } 

     public IEnumerable<TeamDto> GetTeam() 
     { 
      IEnumerable<TeamResult> team = _teamRepository.GetAllTeam(); 

      if (team != null) 
      { 
       foreach (var t in team) 
       { 
        yield return Mapper.Map<TeamDto>(t); 
       } 
      } 

      yield break; 
     } 
} 

public class DomainToDtoMapping : Profile 
{ 
     public DomainToDtoMapping() 
     { 
      CreateMap<TeamResult, TeamDto>().ReverseMap(); 
     } 

     public override string ProfileName 
     { 
      get { return "DomainToDtoMapping"; } 
     } 
} 

웹 API :

public class TeamController : ApiController 
{ 
     private readonly ITeamService _teamServices; 

     public TeamController(ITeamService _teamServices) 
     { 
      _teamServices = teamServices; 
     } 

     public HttpResponseMessage Get() 
     { 
      var teams = _teamServices.GetTeam(); 

      if (teams != null) 
      { 
       var teamEntities = teams as List<TeamDto> ?? teams.ToList(); 

       if (teamEntities.Any()) 
        return Request.CreateResponse(HttpStatusCode.OK, teamEntities); 
      } 

      return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Team not found"); 
     } 
} 

답변

0

개인적으로 나는이 일을 잘하고 있다고 생각합니다. 저장 프로 시저를 리포지토리에서 반환하기 전에 저장 프로 시저를 매핑하는 다른 엔터티를 사용하면 저장 프로 시저가 이미 표시 한 것과 정확히 똑같이 반환하기 때문에 값을 추가하지 않습니다.

비즈니스 계층은 리포지토리가 반환 할 수있는 모든 엔터티에 대해 알아야하며 나중에 반환하기 위해 무언가에 매핑해야합니다. 이 모든 게 나에게 잘 어울려! :)