2017-03-12 7 views
0

私はEntity Frameworkデータベースを最初に使用するプロジェクトを作成しています。 .edmxが現在生成されており、データアクセスレイヤープロジェクトに含まれています。ストアドプロシージャを使用したEntity Frameworkデータベースの最初のアプローチ

私はGetAllTeam関数呼び出しと対応する複合型呼び出しTeamResultを作成しました。私は、関数の呼び出しを呼び出してデータアクセスレイヤーに複合型を設定して、ビジネスレイヤーにデータを返そうとしています。

私のビジネスレイヤーでは、複合型をビジネスオブジェクトにマップし、Web APIに戻します。私のアプローチが正しいかどうかを知りたい。チームと呼ばれるクラスを持つエンティティと呼ばれる別のクラスプロジェクトを作成し、次にその複合クラスをTeamResultというクラスでオートマップしてからビジネスレイヤに戻すか、ビジネスレイヤに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"; } 
     } 
} 

Web 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

個人的には、これはうまくやっていると思います。ストアドプロシージャが既に公開されているものを正確に返すので、ストアドプロシージャをリポジトリから返す前にマップする別のエンティティを持つことは、値を追加しません。

ビジネス層は、リポジトリが返すことができるすべてのエンティティについて知っていなければならず、後で返すために何かにマップする必要があります。これはすべて私によく見える! :)

関連する問題