Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- .net core
- 알고리즘
- 도커
- 백준
- 탐색
- 자료구조
- 시간복잡도
- Get
- asp.net core
- sql
- 파이썬
- asp.net
- mysql
- 스택
- C#
- C++
- quick sort
- .net maui
- Docker
- Merge Sort
- REDIS
- .NET
- docker-compose
- 재귀
- maui
- dfs
- 큐
- 정렬
- API
- BFS
Archives
- Today
- Total
코젤브
[.NET core] SqlKata 사용 시 유의사항 - FirstOrDefaultAsync<> 본문
SqlKata 를 가지고 열심히 실습을 하던 중..
GET 해올 때 모두 초기 값으로 읽어오는 오류를 발견했다.
분명 이전에도 만났던 오류 같은데 정리를 안해두어서 똑같이 삽질을 한시간..을 했다.
그래서 내가 보려고 적어둔다............
[결론]
FirstOrDefaultAsync<> 이런 식으로 바로 읽어오지말고,
FirstOrDefaultAsync(); 이렇게 읽어와서 추후에 객체를 생성해 각각 매핑해주자
읽어오는데 None 으로 읽어오는게 아니라
그냥 초기값으로 읽어와서 정말.. 오류를 찾기 힘들었는데,
쿼리문을 직접 넣어서 비교해보니 FirstOrDefaultAsync<>로 바로 내가 설정한 Model class 형식으로 가져오려고 해서 생기는 문제라는 것을 알게 되었다.
public async Task<CharInfo> GetCharInfoDataAsync(string playerId) // 오류 있음
{
var charInfo = await _queryFactory.Query("char_info")
.Where("player_id", playerId)
.FirstOrDefaultAsync<CharInfo>(); // 이 부분에서 매핑 시 오류?
return charInfo;
}
FirstOrDefaultAsync<CharInfo> 이런 식으로 읽어올 때 CharInfo 형식으로 가져올 때 오류가 난 것 같다..
따라서 아래처럼 FirstOrDefaultAsync()로 읽어온다음, 객체를 생성해서 매핑해주는 것이 안전하다!
public async Task<CharInfo> GetCharInfoDataAsync(string playerId)
{
try
{
var result = await _queryFactory.Query("char_info")
.Where("player_id", playerId)
.Select("player_id", "char_name", "char_exp", "char_level", "char_win", "char_lose", "char_draw")
.FirstOrDefaultAsync();
if (result == null)
{
_logger.LogWarning("No data found for playerId: {PlayerId}", playerId);
return null;
}
var charInfo = new CharInfo
{
PlayerId = result.player_id,
CharName = result.char_name,
Exp = result.char_exp,
Level = result.char_level,
Win = result.char_win,
Lose = result.char_lose,
Draw = result.char_draw
};
_logger.LogInformation("GetCharInfoDataAsync succeeded for playerId: {PlayerId}", playerId);
return charInfo;
}
catch (Exception ex)
{
_logger.LogError(ex, "An error occurred while getting char info data for playerId: {PlayerId}", playerId);
throw;
}
}
무서운 녀석, 앞으로도 <> 는 조심해서 사용하자.
지금 글 작성하다가 든 생각인데, 애초에 넣을 때 new로 생성해서 받으면 문제 없을 것 같긴 하네요..
(아래 같은 느낌으로)
public async Task<bool> UpdateCharacterNameAsync(string playerId, string newCharName)
{
var affectedRows = await _queryFactory.Query("char_info")
.Where("player_id", playerId)
.UpdateAsync(new { char_name = newCharName });
return affectedRows > 0;
}
* 틀린 부분이 있다면 댓글 부탁드립니다
'컴공의 일상 > C#' 카테고리의 다른 글
[MySQL] SQL 쿼리문(Insert/Select) 사용 시 실패 여부 확인 (0) | 2024.07.26 |
---|---|
[Redis] C# ASP.NET Core - CloudStructures (0) | 2024.07.19 |
[Redis] 기본 명령어 (0) | 2024.07.19 |
[Blazor] 외부 API 연동 시 HttpClient - CORS policy (0) | 2024.07.15 |
[Blazor] 컴포넌트 소개 및 활용 (0) | 2024.07.15 |