필수 :
컨트롤러 생성자에 DbContext 를 받아 온다.
//controller
public ChuPlayerController(ChuPlayerDbContext dbContext, IChuPlayer iChuPlayer, ILogger<ChuPlayerController> logger)
{
_IChuPlayer = iChuPlayer;
_dbContext = dbContext;
}
아래와 같이 _dbContext를 이용하여 Get을 한다.
//controller
[HttpGet]
public async Task<List<Summoner>> Get()
{
var result = _dbContext.Summoners
.Include(s => s.PlayerGameResult)
.Include(s => s.PlayerProfile)
.Include(s => s.PlayerLaneTier)
.ToList();
//var ccc = await Task.FromResult(_IChuPlayer.GetSummonerDetails());
return result;
}
.include는 일 대 일 관계 one to one Relationship 의 클래스도 리턴값에 포함하기 위해 사용한 것인데, 이를 위해서는 using으로 아래와 같이 추가 해줘야 한다.
//controller
using Microsoft.EntityFrameworkCore;
Blazor 페이지에서 Get을 Http.GetFromJsonAsync<List<Summoner>>("api/ChuPlayer") 이렇게 하게 되면
.include 되는 항목들이 문제 없이 리턴이 되지만 Json에서 무한 루프를 돌게 되면서 에러가 발생한다.
그 원인은일대일 관계를 위해 포함되는 public Summoner? Summoner { get; set; }때문이며 [JsonIgnore] 를 명시해 주면 Json 에러가 발생하지 않는다.
그러나 GetFromJsonAsync()는 Newtonsoft.Jon이 아닌 System.Text.Json.Serialization을 사용해야 올바르게 작동한다.
//같이 사용해야할 경우에 꼭 주의 바람
using Newtonsoft.Json;
using System.Text.Json.Serialization;
public class PlayerProfile
{
public int? Id { get; set; }
[System.Text.Json.Serialization.JsonIgnore]
public Summoner? Summoner { get; set; }
public int? Serial { get; set; }
public string? AfreecaId { get; set; } //2
public string? AfreecaNickName { get; set; } //3
public List<string>? Mostchamps { get; set; } //= { "", "", "", "", "" } 모스트 챔프
public string? TeamName { get; set; } //팀이름 15
public string? TeamLane { get; set; } //라인 16
public string? KakaoTalkId { get; set; } // 17
public string? Leader { get; set; } //주장 18
public string? Order { get; set; } // 오더 19
public string? Mascort { get; set; } // 마스코트 20
public DateTime? Saved { get; set; } //= DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") 14
public DateTime? Updated { get; set; } = DateTime.Now;
}
0 개의 댓글:
댓글 쓰기