728x90
1️⃣ 1 대 1 관계에서 데이터 수정
Player는 하나의 Item만 소지할 수 있다. Player의 아이템 명을 변경해보자.
public static void Update_1v1()
{
ShowItems();
Console.WriteLine("Input ItemSwitch PlayerId");
Console.Write(" > ");
int id = int.Parse(Console.ReadLine());
using (AppDbContext db = new AppDbContext())
{
Player player = db.players
.Include(p => p.Item) // Include가 빠지면 Item이 Player를 참조하고 있다는 사실을 알 수 없어 Error 발생
.Single(p => p.PlayerId == id);
player.Item = new Item()
{
TemplateId = 777,
CreateDate = DateTime.Now
};
db.SaveChanges();
}
Console.WriteLine("--- Test Complete ---");
ShowItems();
}
위 코드를 실행하면 Rookiss가 기존에 갖고 있던 아이템 101은 주인을 잃고, Rookiss는 777이라는 새로운 아이템을 얻게 된다. 만약 새로운 아이템을 추가하는 것이 아니라 기존에 갖고 있는 아이템의 이름만 변경하고 싶다면,
if (player.Item != null)
{
player.Item.TemplateId = 888;
player.Item.CreateDate = DateTime.Now;
}
player.Item = new Item()이 아니라 바로 player.Item.TemplatedId를 변경해주면 된다.
2️⃣ 1 대 多 관계에서 데이터 수정
하나의 Guild에는 여러 Player가 있다. Guild에 새로운 Player를 추가해보자.
public static void Update_1vM()
{
ShowGuild();
Console.WriteLine("Input GuildId");
Console.Write(" > ");
int id = int.Parse(Console.ReadLine());
using (AppDbContext db = new AppDbContext())
{
Guild guild = db.Guilds
.Include(g => g.Members)
.Single(g => g.GuildId == id);
guild.Members.Add(new Player()
{
Name = "Dopa"
});
db.SaveChanges();
}
Console.WriteLine("--- Test Complete ---");
ShowGuild();
}
3명의 멤버가 들어있던 길드에 새로운 멤버가 정상적으로 추가됐다.
using (AppDbContext db = new AppDbContext())
{
Guild guild = db.Guilds
.Single(g => g.GuildId == id);
guild.Members = new List<Player>()
{
new Player() { Name = "Keria" }
};
db.SaveChanges();
}
Include를 빼고 new List<Player>를 해도 길드에 새로운 멤버를 추가할 수 있다. Include를 빼면 기존 멤버를 찾을 수 없기 때문에 new를 해도 기존 멤버가 없어지는 것이 아니라 새로운 멤버가 추가되기만 한다. Include를 빼지 않은 상태에서 new를 하면 기존 멤버가 사라지고 새로운 멤버인 Keria만 유일하게 길드 멤버가 된다.
728x90
'공부 > EFCore' 카테고리의 다른 글
[EFCore] Convention을 알아보자 (0) | 2022.09.06 |
---|---|
[EFCore] 데이터를 임시로 삭제해보자 : Soft Delete (HasQueryFilter/IgnoreQueryFilter) (0) | 2022.09.06 |
[EFCore] Pricipal 데이터가 없을 때 Dpendent 데이터가 존재할 수 있는가? (0) | 2022.09.05 |
[EFCore] Disconnected Update (Reload / Full Update) (0) | 2022.09.05 |
[EFCore] DTO 활용하기 (0) | 2022.09.05 |