私はEntity Frameworkデータベースを最初に使用するプロジェクトを作成しています。 .edmx
が現在生成されており、データアクセスレイヤープロジェクトに含まれています。ストアドプロシージャを使用したEntity Frameworkデータベースの最初のアプローチ
私はGetAllTeam
関数呼び出しと対応する複合型呼び出しTeamResult
を作成しました。私は、関数の呼び出しを呼び出してデータアクセスレイヤーに複合型を設定して、ビジネスレイヤーにデータを返そうとしています。
私のビジネスレイヤーでは、複合型をビジネスオブジェクトにマップし、Web APIに戻します。私のアプローチが正しいかどうかを知りたい。チームと呼ばれるクラスを持つエンティティと呼ばれる別のクラスプロジェクトを作成し、次にその複合クラスをTeamResult
というクラスでオートマップしてからビジネスレイヤに戻すか、ビジネスレイヤに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();
}
}
}
ビジネスロジック層:
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");
}
}