λ κ°μ 1:N κ΄κ³λ₯Ό λ§Ίλ κ°μ²΄κ° μμ΅λλ€.
Team:n - 1:Worker : κ΄λ¦¬μ
Team:1 - n:Worker : μμ
// μλ μ½λ
class Team
{
Worker? Manger;
Worker[] Member;
}
class Worker
{
Team? Team;
Team[] Managings;
}
// IEntityModelConfiguration<Team>
// κ΄λ¦¬μ κ΄κ³
builder.HasOne( x => x.Manager)
.WithMany( x => Managings)
.IsRequired(false)
.OnDelete(DeleteBehavior.SetNull);
// μμ κ΄κ³
builder.HasMany( x => x.Members)
.WithOne(x=>x.Team)
.IsRequied(false)
.OnDelete(DeleteBehavior.SetNull);
EF λ§μ΄κ·Έλ μ΄μ μ λ°μ΄νΈ νμ, κ° ν μ΄λΈμ foreign key κ° κ°κ° μ λ€μ΄κ° μμ΅λλ€.
teams.manager_id
workers.team_id
κ·Έλ°λ°, λ¬Έμ λ μλμ μ½λμμ,
dbcontext.Workers.Add( new Worker(){ Team = new Team(), } );
dbcontext.SaveChanges();
Worker ν μ΄λΈμ Insert, Update μμ ForeignKey Not Null constraint μλ°νλ€λ μλ¬κ° λ©λλ€.
μ°Έκ³ λ‘, μ΄ μλ¬μ μμ, κ°μκΈ° Worker ν μ΄λΈμ Id μ λν΄ Primary Key Not Null constraint μλ°νλ€λ μλ¬κ° λμ,
builder.Property( x => x.Id)
.IsRequired()
.ValueGeneratedOnAdd() // Postgresqlμ νμ₯ ν¨μ uuid-ossp() μ¬μ©.
builder.HasKey( x=> x.Id);
λ₯Ό μλλ‘ λ체νμ¬,
builder.Property( x => x.Id)
.IsRequired()
//.ValueGeneratedOnAdd() // Postgresqlμ νμ₯ ν¨μ uuid-ossp() μ¬μ©.
.HasDefaultValueSql("gen_random_uuid()") // Postgresql μ λΉνΈμΈ V4 Guid μμ±ν¨μ
PK μλ¬λ μμ΄μ‘λλ°, λ¬κΈμμ΄ FK κ° μ΄μ΄μ§λ€μ.
μ λλ€κ° κ°μκΈ° μλ¬κ° ν°μ§λ λ°λμ λ©λΆ μ¨ μνμ λλ€.
DB κ³ μλλ€μ μ‘°μΈ λΆνλ립λλ€.