트랜잭션 문의

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 베이스/채팅/데이터베이스/월드 SDK 버전 :
  • 프로젝트명 :
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

안녕하세요.
뒤끝 베이스의 TransactionValue와
뒤끝 데이터베이스의 TransactionBuilder를 같이 묶어서 보낼 수 있는 방법이 있을까요?

재화 데이터의 위치는 게임정보
상태 데이터의 위치는 데이터베이스

이렇게 분리되어 있을 때 한번에 업데이트 할 수 있는 방법이 있을까 하여 문의합니다.

뒤끝 개발팀을 통한 별도의 기술지원이 작업이 필요한 요청은 help@backnd.com 으로 문의해주시기 바랍니다.

안녕하세요 개발자님,
베이스의 게임정보 테이블과, 데이터베이스의 테이블은 독립된 데이터에 해당하여,
두 데이터를 함께 트랜잭션으로 처리하는 것은 불가합니다.
각각 개별적으로 처리하여 이용해 주셔야 합니다.

좋아요 1

넵 감사합니다.
추가로 트랜젝션 관련하여 문의할게 있습니다.
스크린샷의 형태처럼 구매 처리 및 아이템 차감/지급을 트랜젝션을 이용하여 사용하고 싶은데
Inc, Dec 함수는 트렌잭션 사용이 안되는지 하여 문의합니다.

추가로 Inc, Dec를 사용하지 않고 Update(currencytest)를 하면 잘 작동되긴 합니다.


image

BuyAuctionItem failed: InvalidOperationException: Set/Inc/Dec requires a WHERE clause
at BACKND.Database.BTask1[T].get_Result () [0x0000b] in .\Library\PackageCache\com.backnd.database@0ee2ab6f245e\Tools\BTask.cs:452 at BACKND.Database.BTaskAwaiter1[T].GetResult () [0x00001] in .\Library\PackageCache\com.backnd.database@0ee2ab6f245e\Tools\BTask.cs:651
at GameBerry.AuctionManager.BuyAuctionItem (GameBerry.Auction selectedAuction) [0x0031c] in C:\GitFolder\ProjectTT\PTT\Assets\Main\Scripts\FrameWork\Controller\Managers\AuctionManager.cs:190
UnityEngine.Debug:LogError (object)
GameBerry.AuctionManager/d__8:MoveNext () (at Assets/Main/Scripts/FrameWork/Controller/Managers/AuctionManager.cs:204)
Cysharp.Threading.Tasks.CompilerServices.AsyncUniTaskMethodBuilder:Start<GameBerry.AuctionManager/d__8> (GameBerry.AuctionManager/d__8&) (at Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskMethodBuilder.cs:111)
GameBerry.AuctionManager:BuyAuctionItem (GameBerry.Auction)
GameBerry.AuctionTestGuiController/d__37:MoveNext () (at Assets/Main/Scripts/FrameWork/Controller/Managers/AuctionTestGuiController.cs:398)
Cysharp.Threading.Tasks.CompilerServices.AsyncUniTaskVoidMethodBuilder:Start<GameBerry.AuctionTestGuiController/d__37> (GameBerry.AuctionTestGuiController/d__37&) (at Assets/Plugins/UniTask/Runtime/CompilerServices/AsyncUniTaskVoidMethodBuilder.cs:110)
GameBerry.AuctionTestGuiController:BuyAuctionAsync (GameBerry.Auction)
GameBerry.AuctionTestGuiController:DrawWindow (int) (at Assets/Main/Scripts/FrameWork/Controller/Managers/AuctionTestGuiController.cs:285)
UnityEngine.GUI:CallWindowDelegate (UnityEngine.GUI/WindowFunction,int,int,UnityEngine.GUISkin,int,single,single,UnityEngine.GUIStyle)

트랜잭션도 Inc, Dec 함수 사용이 가능합니다.
단, 개발자문서 내 안내된것과 같이 Inc, Dec 함수는 반드시 Where() 조건이 필요합니다.

트랜잭션 OfCurrentUser()함수 사용 예시에

var result = await DBClient.Transaction()
.From()
.OfCurrentUser()
.Dec(x => x.Gold, 1000)
.From()
.Insert(newItem)
.Commit();

이렇게 사용하던데 혹시 사용할 수 있는 조건이 다를까요?

그리고 스샷처럼 Dec함수 뒤에 Update()를 안붙이면 컴파일 에러가 나오는데
트랜잭션 예시에서는 저런식으로 사용하더라구요.
헷갈리긴 했지만 지금은 Update()를 붙여 넣어 잘 되긴 합니다!


좋아요 1

추가로, 아래 스샷 코드 완료 시 Success 로그를 확인하였는데
result.TotalAffectedRows가 적어도 2가 나와야하지 않나 싶지만 0으로 나옵니다. 혹시 0으로 나오는게 맞는지 문의 드립니다!


트랜잭션은 현재 사용해주신 방법처럼 사용해주시는 것이 맞습니다.
개발자 문서는 관련 내용을 보완 업데이트할 수 있도록 하겠습니다.

추가로 문의해주신 내용의 경우 다음과 같이 결과값이 확인될 수 있습니다.

상황 OperationCount TotalAffectedRows
두 테이블 모두 업데이트됨 2 2
하나만 업데이트됨 2 1
둘 다 조건 불일치 2 0

해당 값이 0으로 반환되는 것은 비정상 동작은 아니며,
조건에 맞는 데이터가 존재하지 않을 경우 발생할 수 있습니다.
조건에 맞는 데이터가 존재하는지 확인해보시는 것을 권장드립니다.

확인 감사합니다!
TotalAffectedRows 은 콘솔상에 두 개의 행(Auction, currencytest)이 정상적으로 업데이트 되었음에도 0으로 나와서 문의드렸습니다.
프로젝트는 PTT_Dev 입니다!

관련 정보 상세 확인하여 안내드릴 수 있도록 하겠습니다.

좋아요 1

서버에서 전달 하고 있는 키 값을 읽는 부분에서 일부 정상적으로 전달이 이루어지지 못해 발생한 문제로 확인됩니다.
원인 확인과 함께 즉시 픽스가 진행되었으니 참고하여 이용해 주시면 감사하겠습니다.

좋아요 1