공부/EFCore
[EFCore] SaveChanges를 호출하면 어떤 일이 일어날까
돌멩이수프
2022. 9. 4. 22:01
728x90
1️⃣ 추가된 객체들의 상태가 Unchaged로 바뀐다.
참고 : https://codingjin0424.tistory.com/124
2️⃣ SQL Identity로 PK를 관리한다. ▶ DB에 데이터를 추가한 후 ID를 클라로 받아와 객체의 ID Property를 채워준다.
3️⃣ Relationship을 참고해서 FK 세팅 및 연결을 완료한다.
public class DbCommands
{
public static void InitializeDB(bool forceReset = false)
{
using (AppDbContext db = new AppDbContext())
{
if (!forceReset && (db.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists())
return;
db.Database.EnsureDeleted();
db.Database.EnsureCreated();
CreateTestData(db);
Console.WriteLine("DB Initialized");
}
}
public static void CreateTestData(AppDbContext db)
{
var rookiss = new Player() { Name = "Rookiss" };
var faker = new Player() { Name = "Faker" };
var deft = new Player() { Name = "Deft" };
List<Item> items = new List<Item>()
{
new Item()
{
TemplateId = 101,
CreateDate = DateTime.Now,
Owner = rookiss
},
new Item()
{
TemplateId = 102,
CreateDate = DateTime.Now,
Owner = faker
},
new Item()
{
TemplateId = 103,
CreateDate = DateTime.Now,
Owner = deft
}
};
Guild guild = new Guild()
{
GuildName = "T1",
Members = new List<Player>() { rookiss, faker, deft }
};
db.Items.AddRange(items);
db.Guilds.Add(guild);
// 0 (기본 설정)
Console.WriteLine(rookiss.PlayerId);
db.SaveChanges();
// 1 (rookiss가 ID 1로 설정됨)
Console.WriteLine(rookiss.PlayerId);
}
}
위 코드를 참고하면 SaveChanges를 하기 전에는 rookiss의 PlayerId가 0, 즉 데이터가 추가되지 않은 상태였고 SaveChanges 뒤에는 PlayerId가 1로 설정되었다.
728x90