Asp.net mvc 5 使用存储过程的实体框架数据库优先方法

Asp.net mvc 5 使用存储过程的实体框架数据库优先方法,asp.net-mvc-5,entity-framework-6,ef-database-first,Asp.net Mvc 5,Entity Framework 6,Ef Database First,我正在创建一个使用实体框架数据库优先方法的项目。.edmx当前已生成,并且位于我的数据访问层项目中 我已经创建了一个函数导入调用GetAllTeam和相应的复杂类型调用TeamResult。我试图通过调用函数import将数据返回到业务层,在数据访问层填充复杂类型 在我的业务层中,我将把复杂类型映射到业务对象并返回到我的web api。我想知道我的方法是否正确。我是否需要创建一个名为entities的单独类项目,其中包含一个名为team的类,然后将该类与复杂类型自动映射,然后返回到业务层,或者直

我正在创建一个使用实体框架数据库优先方法的项目。
.edmx
当前已生成,并且位于我的数据访问层项目中

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

在我的业务层中,我将把复杂类型映射到业务对象并返回到我的web api。我想知道我的方法是否正确。我是否需要创建一个名为entities的单独类项目,其中包含一个名为team的类,然后将该类与复杂类型自动映射,然后返回到业务层,或者直接将
TeamResult
发送到业务层可以吗

让我也知道这个方法是否还有其他问题

请参阅下面的代码

数据访问层:

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();
            }
        }
}
公共类团队存储库
{
公共IEnumerable GetAllTeam()
{
使用(var mcrContext=new MCREntities1())
{
返回(来自mcrContext.GetAllTeam()中的团队)
选择新的团队结果
{
TeamName=team.TeamName,
TeamDescription=team.TeamDescription,
代码=团队代码
}).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"; }
        }
}
公共类团队服务:ITeamService
{
私有只读ITeamRepository\u teamRepository;
公共团队服务(ITeamRepository团队存储库)
{
_teamRepository=teamRepository;
}
公共IEnumerable GetTeam()
{
IEnumerable团队=_teamRepository.GetAllTeam();
如果(团队!=null)
{
foreach(团队中的var t)
{
收益率映射器.Map(t);
}
}
屈服断裂;
}
}
公共类域映射:配置文件
{
公共域映射()
{
CreateMap().ReverseMap();
}
公共重写字符串配置文件名
{
获取{返回“域映射”;}
}
}
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");
        }
}
公共类TeamController:ApicController
{
私有只读ITeamService\u团队服务;
公共团队控制员(ITeamService\u团队服务)
{
_团队服务=团队服务;
}
公共HttpResponseMessage Get()
{
var teams=_teamServices.GetTeam();
如果(团队!=null)
{
var teamEntities=团队作为列表??teams.ToList();
if(teamEntities.Any())
返回请求.CreateResponse(HttpStatusCode.OK,teamEntities);
}
返回请求.CreateErrorResponse(HttpStatusCode.NotFound,“未找到团队”);
}
}

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

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