EF Core Π½Π΅ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ (Π² Ρ.Ρ. Π»ΠΈΡΡΡ) ΠΊΠ°ΠΊ ΠΌΡ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ, Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ - ΡΡΠΎ:
- ΠΠ°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ (Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊ), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΡΡΡΡ/Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΡΡΡΡ, ΠΏΡΠΈΡΡΠΌ ΡΡΠ° Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΡΡΡΠ½ΡΡ ΠΏΡΠΎΠΏΠΈΡΠ°Π½Π°
- ΠΠ°Π±ΠΎΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ (ΡΡΡ ΡΡΠΎΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΠΏΠΈΡΠ°ΡΡ, ΠΏΠΎΠΏΡΠΎΠ±Ρ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Π½Π° ΠΊΡΡΠΊΠ΅ ΠΊΠΎΠ΄Π°):
builder
.HasMany(employee => employee.Subordinates)
.WithOne()
.HasForeignKey(employee => employee.ChiefId)
.OnDelete(DeleteBehavior.SetNull);Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π½Π°ΡΡΡΠΎΠΈΠ»ΠΈ one-to-many ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ employee.Subordinates ΠΈ employee.ChiefId, Π½ΠΎ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ?
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΊΠ°Π·Π°Π», EF Core Π½Π΅ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π»ΠΈΡΡ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ, ΠΈ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² Subordinates ΡΡΠΎ-Π»ΠΈΠ±ΠΎ, ΡΡΡΠ΅ΠΊΡΠ° Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ (ΡΠ°Π·Π²Π΅ ΡΡΠΎ Π²ΡΠΊΠΈΠ½Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°).
ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ EF Core Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
- ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ
Id, Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ° Π΅ΡΡΡ Π°ΡΡΡΠΈΠ±ΡΡChiefId, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ° Ρ Π΅Π³ΠΎ ΡΠ΅ΡΠΎΠΌ - Π’ΠΎΠ³Π΄Π° Π»ΠΈΡΡ
Subordinates- ΡΡΠΎ ΡΠΎ, ΠΊΡΠ΄Π° Π½Π°Π΄ΠΎ Π·Π°ΡΠΎΠ²ΡΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΡChiefId==IdΠ½Π°ΡΠ΅Π³ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ°
ΠΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ EF Core Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ