使用存储过程

时间:2017-03-12 22:06:39

标签: asp.net-mvc-5 entity-framework-6 ef-database-first

我正在创建一个使用Entity framework Database first方法的项目。 .edmx当前已生成,位于我的数据访问层项目中。

我创建了一个函数导入调用GetAllTeam和相应的复杂类型调用TeamResult。我试图通过调用我的函数导入将数据返回到业务层,在数据访问层中填充复杂类型。

在我的业务层中,我将把复杂类型映射到业务对象并返回到我的web api。我想知道我的方法是否正确。我是否需要使用名为team的类创建一个名为entities的单独类项目,然后使用复杂类型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");
        }
}

1 个答案:

答案 0 :(得分:0)

就个人而言,我认为你这样做很好。让另一个实体将存储过程映射到从存储库返回之前不会添加任何值,因为您正在返回存储过程已经公开的内容。

业务层需要知道存储库可以返回的任何实体,然后将其映射到稍后要返回的内容。这对我来说都很好看! :)