2017-03-12 46 views
0

我正在創建一個使用實體框架數據庫第一種方法的項目。 .edmx目前已生成並位於我的數據訪問層項目中。使用存儲過程的實體框架數據庫第一種方法

我已經創建了一個函數導入調用GetAllTeam和相應的複雜類型調用TeamResult。我試圖通過調用我的函數導入,將數據返回到業務層,在數據訪問層中填充複雜類型。

在我的業務層中,我將複雜類型映射到業務對象並返回到我的web 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"; } 
     } 
} 

的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

就我個人而言,我認爲你做得很好。讓另一個實體將存儲過程映射到從存儲庫返回之前不會添加任何值,因爲您正在返回存儲過程已公開的內容。

業務層需要知道存儲庫可以返回的任何實體,然後將其映射到稍後返回的內容。這一切對我來說都很好! :)

相關問題