44,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part8: Entity Framework Core
EntityState.Unchanged로 처리 후 데이터베이스 조회시 다른 필드값이 null인 경우에 대한 질문
안녕하세요? Rookiss님. 몬스터가 드랍하는 아이템중에 stackable 아이템이 있어서 DB 조회없이 바로 갯수를 업데이트하고자 하여 아래와 같이 코드를 작성했습니다. 그 후에 다시 인벤토리 아이템을 클라에 통보하기 위하여 조회를 했으나 Stackable Item의 다른 Property가 모두 NULL이 되어 버리네요. 그래서 결국 아이템을 조회한 후에 갯수를 추가하니 정상적으로 처리가 되네요. 질문1 : 이런 경우 entityState를 사용하지 못하고 꼭 데이터베이스에 조회를 해야할 까요? 질문2 : stackable Item의 경우라면 어떤 로직으로 처리를 하는 게 바람직할 지 조언을 부탁드리고자 합니다. ------------------------------------------------------------------------------------ 구글링을 통해 stackoverflow에서 찾아본 결과는 아래와 같습니다. stackoverflow의 답변 https://stackoverflow.com/questions/28479933/after-setting-entitystate-unchanged-the-entity-properties-are-lost => 채택된 답변은 아이템의 갯수를 업데이트하기 전에 먼저 조회를 하라고 합니다. ------------------------------------------------------------------------------------ 제가 작성중인 Dbtransaction 클래스의 메서드입니다. ------------------------------------------------------------------------------------ public static void RewardStackableItem(Player player, GameRoom room, int itemDbId, int totalCount) { if (player == null || room == null || itemDbId == 0) return; ItemDb oldItemDb = new ItemDb() { ItemDbId = itemDbId, Count = totalCount }; // YOU Instance.Push(() => { S_UpdateItem updateItemPacket = new S_UpdateItem(); using (AppDbContext db = new AppDbContext()) { // 방법1. EntityState 로 처리 //db.Entry(oldItemDb).State = EntityState.Unchanged; //db.Entry(oldItemDb).Property(nameof(ItemDb.Count)).IsModified = true; // 방법2 : 데이터베이스에 조회를 한 후에 처리 ItemDb item = db.Items .Single(i => i.OwnerDbId == player.PlayerDbId && i.ItemDbId == itemDbId); item.Count = totalCount; bool success = db.SaveChangesEx(); if (success) { //문제가 발생하는 부분으로 인벤토리의 해당 아이템을 수정하지 않고 그냥 조회 후 인벤토리를 clear한 후에 다시 인벤토리의 아이템을 만들어서 클라에 통보하고자 하였습니다. List<ItemDb> items = db.Items .Where(i => i.OwnerDbId == player.PlayerDbId).ToList(); player.Inven.Items.Clear(); // Me room.Push(() => { foreach (ItemDb itemDb in items) { Item item = Item.MakeItem(itemDb); if (item != null) { player.Inven.Add(item); ItemInfo info = new ItemInfo(); info.MergeFrom(item.Info); updateItemPacket.Items.Add(info); } } player.Session.Send(updateItemPacket); }); } } }); }
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part8: Entity Framework Core
FK와 JOIN
Part8의 관련 데이터 로딩 강의에서 제가 제대로 이해하고 있는지 궁금합니다. 위와 같이 데이터 모델링을 하고 데이터를 넣어줬다면 Player와 Guild의 DB는 위처럼 됩니다. 여기서 위처럼 Include를 하게 된다면 양쪽 다 GuildId라는 column을 가지고 있고, 플레이어의 GuildId는 연관된 길드의 PK값을 가지고 있으니 (이게 FK), 둘의 GuildId를 Join해서 일치하면 알맞게 해당 Guild의 Members에 연관된 Player의 데이터를 넣어주는 건가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part8: Entity Framework Core
유니티에서 하드코딩으로 게임 개발이 가능할까요?
개발 목표는 심즈처럼 방꾸미는 게임 온라인버전인데요. 유니티를 사용하고 있는데, 맵이 상당히 많을것으로 예상되는데 맵이나 리소스를 로드해서 유니티로 구현 성공 가능할까요? 예를들면 맵의 나무 오브젝트도 JSON데이터로 받은 뒤 시리얼라이징 해서 표시할예정인데 이런경우에는 번거롭다는 글을 봐서 괜히 걱정드네요. 일단 서버통신쪽 개발하면서 직접 테스트 해봐야겠네요. (오픈월드형 게임)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part8: Entity Framework Core
UDF 관련해서 질문드립니다.
안녕하세요. UDF 강의 수강 중 오류가 발생해서 질문 올립니다. 직접 정의한 함수를 EF Core에 등록하는 과정 중 Annotation형태로 할 때 [DbFunction()] Attribute를 함수 위에 작성하면 된다고 하셨는데 테스트해보니깐 NotImplementedException을 발생시킵니다. 혹시 Attribute에 추가적으로 명시해야하는게 있는걸까요? 혹시 코드 문제인가 싶어 강의 속 코드를 몇번이고 확인해봤지만 Fluent Api형태로 등록하면 되는걸로 봐서는 코드 문제는 아닌것같습니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part8: Entity Framework Core
Table Splitting 부분에서 사소한 에러에 대해 질문이 있어요
세번째 연동방법 Table Splitting에서 사소한 오류가 있어서.. 질문을 드려봐요 System.InvalidOperationException: ''EventItem' is mapped to the table 'Item' while 'Item' is mapped to the table 'Items'. Map all the entity types in the hierarchy to the same table or remove the discriminator and map all of them to different tables. See https://go.microsoft.com/fwlink/?linkid=2130430 for more information.' 이런 오류가 떴었는데, 처음에는 제가 모델링이 잘못됐나 하고 계속 분석을 해보고 수업자료를 받아서도 실행을 시켜봤는데.. 똑같은 에러가 계속 떴습니다. builder.Entity<Item>().ToTable("Items"); builder.Entity<ItemDetail>().ToTable("Items"); 그래서 이 코드를 지워봤는데 이때는 DB initialize가 정상적으로 작동을 하더라고요.. 문득 에러 메시지를 다시 봤는데, 저희가 Items를 강제적으로 Item으로 바꾼게 기억이 나서, ToTable("Item")으로 바꿨더니 정상 작동이 됐습니다. 저 에러대로라면, 상속받은 EventItem은 TPH로 관리되는 item으로 매핑이 되는데, 우리가 Item으로 바꾼것을 FluentAPI로 다시 Items로 관리할려고 하니 불협화음으로 인한 에러일까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part8: Entity Framework Core
몇 가지 질문이 있습니다!
List<Value05> info = db.Value05s .Where(g => g.NodeID == "2f8814" .ToList(); var info = db.Value05s .Where(g => g.NodeID == "2f8814") .ToList(); 1. 위 두가지로 방식으로 데이터를 읽어봤을 때, 데이터 내용에는 큰 차이가 없는 것 같은데, 같은 문법이라고 봐도 되는건가요? 혹시 차이가 있는지.. 2. db테이블을 가져올때 항목 중에 Null로 데이터가 들어있는게 있으면, 실행할 때 위 항목에서 'data is null' 이라는 에러가 나더라고요.. 혹시 그 부분을 무시할 수 있는 방법이 있는지 궁금합니다.. 감사합니다!
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part8: Entity Framework Core
DB연결할 때 연결문자열을 넣잖아요?
제가 기존의 갖고 있는 DB를 넣으려고 보니까, 비밀번호 아이디가 모두 포함되어있는 연결문자열이 나오더라고요, 보안의 이슈가 없는지요.. 다른 방식으로 연결하는 방법이 있다고 말씀하셨는데, 다른 강좌 중에 해당 내용이 있는지도 궁금합니다!