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
'공부 > EFCore' 카테고리의 다른 글
[EFCore] DB에 존재하는 데이터 수정하기 (0) | 2022.09.05 |
---|---|
[EFCore] DB에 이미 존재하는 사용자를 PK로 연결하려면? (0) | 2022.09.04 |
[EFCore] Entity State, 엔티티의 상태를 알아보자 (0) | 2022.09.04 |
[EFCore] Eager Loading / Explicit Loading / Select Loading (0) | 2022.09.02 |
[EFCore] Include VS ThenInclude (0) | 2022.09.02 |