Code first entity framework c
Code first entity framework c
Code first entity framework c
ΠΠ°Π½Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΡΡΠ°ΡΠ΅Π»ΠΎ. ΠΠΊΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ: Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Entity Framework Core
Π§ΡΠΎΠ±Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Entity Framework, ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½Π° Π±ΡΠ΄Π΅Ρ, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΡΠ±Π΅ΡΠ΅ΠΌ Visual Studio 2017.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΡΡΡΡ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΡΠΎΠ΅ΠΊΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ User:
ΠΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°Π²ΡΠΎΡΠ²ΠΎΠΉΡΡΠ². ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΡΡΠΎΠ»Π±ΡΠΎΠΌ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈΠ· Π±Π΄.
ΠΠ°Π΄ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Entity Framework ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Code First ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»ΡΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π² Π±Π΄. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π±Π΄ EF Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Id ΠΈΠ»ΠΈ [ΠΠΌΡ_ΠΊΠ»Π°ΡΡΠ°]Id (ΡΠΎ Π΅ΡΡΡ UserId). ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π½Π°Π·Π²Π°ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ½Π°ΡΠ΅, ΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²Π½Π΅ΡΡΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π½Π° c#.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π±Π΄ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π΄ ΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΌΠΈ Π΄Π°Π½Π½ΡΠ΅. ΠΠΎ, Ρ Π½Π°Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΅ΡΠ΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ EF. Π§ΡΠΎΠ±Ρ Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, Π½Π°ΠΆΠΌΠ΅ΠΌ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΈ Π²ΡΠ±Π΅ΡΠ΅ΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Ρ Manage NuGet Packages.
ΠΠ°ΡΠ΅ΠΌ Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ NuGet-ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ Π² ΠΎΠΊΠ½Π΅ ΠΏΠΎΠΈΡΠΊΠ° Π²Π²Π΅Π΄Π΅ΠΌ ΡΠ»ΠΎΠ²ΠΎ «Entity» ΠΈ Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Entity Framework ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π΅Π³ΠΎ:
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΡΠΎΠ΅ΠΊΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ UserContext:
ΠΡΠ½ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Entity Framework ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊΠ»Π°ΡΡΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ System.Data.Entity. Π‘ΡΠ΅Π΄ΠΈ Π²ΡΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
DbContext : ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄Π°Π½Π½ΡΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ .
DbModelBuilder : ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ C# Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
DbSet/DbSet : ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ, Ρ ΡΠ°Π½ΡΡΠΈΡ ΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
Π Π»ΡΠ±ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ Ρ ΠΠ ΡΠ΅ΡΠ΅Π· Entity Framework, Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ (ΠΊΠ»Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΡ DbContext) ΠΈ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ DbSet, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ ΠΈΠ· ΠΠ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΠΊΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ UserContext.
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ. ΠΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ EntityFramework Π² ΠΏΡΠΎΠ΅ΠΊΡ Π² Π½Π΅ΠΌ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ configSections. Π ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΡΠ΅Π³Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ:
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ°ΠΉΠ»Ρ Program.cs ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ using ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° User ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π½Π°ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Add : db.Users.Add(user1)
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π±Π΄, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Users ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΄Π°Π½Π½ΡΡ : db.Users
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ²Π΅Π΄Π΅Ρ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ:
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Entity Framework ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΈ ΡΠΎΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ Π΄Π°ΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π² Π½Π΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ. Entity Framework Π²ΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅Ρ Π·Π° Π½Π°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. Π Π΅ΡΠ»ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ, ΡΠΎ EF Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΅Π΅.
Entity Framework Code First Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅
Π ΡΡΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Ρ ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Π»ΠΈΡΠ½ΡΠΌ ΠΎΠΏΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Entity Framework (EF) Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΠΎΠ²Π΅ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°.
ΠΡΠ΅ ΡΠ°Π· Ρ ΠΎΡΡ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ, ΡΡΠΎ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, Π² enterprise ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ΅ β ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅, Π° Π½Π΅ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ ΠΈ ΡΡ ΠΎΠ΄ΡΡ, Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠ΅, Π° Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΡΠ°ΡΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π³ΠΎΠ΄Π°ΠΌΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΌΠΎΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π²ΡΠ΅Π³Π΄Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π° Π½Π΅ ΠΌΠΎΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ Π³ΠΎΡΠΎΠ²Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ β ΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌ. ΠΡΡΡΠ½ΡΡ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΎΡΠ΅Π½Ρ ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ:
Π‘ΠΎΠ²Π΅Ρ β1. ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°Π±Π»ΠΈΡΡ
CΠΊΡΠΈΠΏΡ T-SQL, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ ΠΎΡΡΡΠ΄Π°, ΡΠ΅Π°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π΅Π½.
Π‘ΠΎΠ²Π΅Ρ β2. ΠΡΠ΅Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ view
EF ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΠ»Π³ΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ view.
ΠΡΠ΅Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ view β ΡΡΠΎ Π½Π΅ΡΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²Π½ΡΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. ΠΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π½Π° ΡΡΠ°ΠΏ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡ ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠ»Ρ ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ EF ΡΠΏΠΎΡΠΎΠ±Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ. Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΡΠ°Π»ΡΡ ΠΈΠΌ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½.
Π‘ΠΎΠ²Π΅Ρ β3. ΠΠ°ΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ DetectChanges
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π½Π°ΡΡΡΠΎΠ΅Π½ Π½Π° ΡΠΎ, ΡΡΠΎΠ±Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ°ΠΏΡΡΡΠΈΠ² Π΅Π³ΠΎ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° Π±ΡΠ΄ΡΡ ΡΠ΄ΠΈΠ²Π»Π΅Π½Ρ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠ°ΡΠ΅Π½ΠΎ Π½Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° Π·Π°ΠΏΡΠΎΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , Π° Π½Π° Π²ΡΡΠ°Π²ΠΊΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΡΠ°ΠΌ dbContext. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ Π²Π½ΡΡΡΠΈ DbContext-Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΌΠ°ΡΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΌΠ°Π»ΠΎΠΈΠ·ΡΡΠ΅Π½Π½ΡΡ Π²Π΅ΡΠ΅ΠΉ, ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ Π·Π΄Π΅ΡΡ. Π§ΡΠΎΠ±Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ DbContext, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ²Π½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ DetectChanges(), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΌ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ. Π’Π°ΠΊ, Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅:
Π‘ΠΎΠ²Π΅Ρ β4. Π‘Π»Π΅Π΄ΠΈΡΠ΅ Π·Π° sql-Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ
ΠΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΎΠ²Π΅Ρ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΠΉ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, ΠΊΠΎ Π²ΡΠ΅ΠΌ ORM, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ ΠΎ Π½Π΅ΠΌ Π·Π°Π±ΡΠ²Π°ΡΡ. Π ΠΏΠΎΡΠ»Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΡΠΊΡΡΠ² ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ ΠΈ ΡΠ²ΠΈΠ΄Π΅Π² 50 Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ ΠΠ Π΄Π»Ρ ΠΏΠΎΠΊΠ°Π·Π° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΎΡΠΌΡ, Π±ΡΠ²Π°ΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΄ΠΈΠ²Π»Π΅Π½Ρ.
ΠΠ΅ΠΆΠ΄Ρ ΡΠ΅ΠΌ, ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. Π‘ΡΠ΅Π΄ΠΈ ΡΡΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ β ΠΌΠ΅ΡΠΎΠ΄ Include, ΠΊΠΎΡΠΎΡΡΠΉ Β«Π²ΡΡΡΠ³ΠΈΠ²Π°Π΅ΡΒ» Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ Π·Π°ΠΏΡΠΎΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
Π‘ΠΎΠ²Π΅Ρ β5. ΠΠ·ΠΎΠ»ΠΈΡΡΠΉΡΠ΅ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
Π₯ΠΎΡΡ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ EF Π΅ΡΡΡ ΡΠ»ΠΎΠ²ΠΎ Β«ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΒ», Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
.
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΠΊΠ½ΠΈΠ³ ΠΈ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΉ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ΄, ΠΏΠΎΡ
ΠΎΠΆΠΈΠΉ Π½Π° ΡΡΠΎΡ:
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΏΠ»ΠΎΡΠ½ΠΎ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΠ°ΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊ Entity Framework. ΠΡΠΎ Π½Π΅ Ρ ΠΎΡΠΎΡΠΎ ΠΈ Π½Π΅ ΠΏΠ»ΠΎΡ ΠΎ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΠ»ΠΎΠΆΠ½ΡΠ΅ΡΠ΅ ΡΠ΅Π±Π΅ ΠΆΠΈΠ·Π½Ρ, Π΅ΡΠ»ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΡ. Π Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ°ΡΡΠ°:
ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Ρ ΠΎΡΠΎΡ ΡΠ΅ΠΌ, ΡΡΠΎ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎ Π²Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ· ΠΠ ΠΈ ΠΊΠ°ΠΊ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π² ΠΠ. ΠΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΈΠΌ Π²Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΠ΅ ΡΠ΅Π±Π΅ ΠΆΠΈΠ·Π½Ρ.
Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ Code First
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΌΠ΅ΡΠΎΠΊ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ API. ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ API, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΡΡ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΊ Π΄Π°Π½Π½ΡΠΌ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΌ. Π² Π·Π°ΠΌΠ΅ΡΠΊΠ°Ρ ΠΊ Π΄Π°Π½Π½ΡΠΌ, API Fluent β ΡΠ²ΡΠ·ΠΈ, API Fluent β ΡΠΈΠΏΡ & ΠΈ API Fluent Ρ VB.NET.
ΠΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ Code First Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ API. Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΎΠ±Π·ΠΎΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Code First.
ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²
ΠΡΠ»ΠΈ ΡΠΈΠΏΡ ΡΡΠ°ΡΡΠ²ΡΡΡ Π² ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ DbSet Π΄Π»Ρ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΡΠΈΠΏΡ Π±ΡΠ΄ΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΠ±ΠΎΡΠΊΠ΅, ΡΡΠΎ ΠΈ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° SchoolEntities (Departments) ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ DbSet. Code First ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΡΡ ΡΡΡΠ»ΠΎΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ².
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΡΠΈΠΏ ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π°ΡΡΠΈΠ±ΡΡ NotMapped ΠΈΠ»ΠΈ API DbModelBuilder.Ignore fluent API.
Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΌ ΠΊΠ»ΡΡΠ΅
Code First ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ, Π΅ΡΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΠΌΠ΅Π΅Ρ ΠΈΠΌΡ ID (Π±Π΅Π· ΡΡΠ΅ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°) ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ «ID». ΠΡΠ»ΠΈ ΡΠΈΠΏ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΡΠ»ΠΎΠ²ΡΠΌ ΠΈΠ»ΠΈ GUID, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π½Π°ΡΡΡΠΎΠ΅Π½ ΠΊΠ°ΠΊ ΡΡΠΎΠ»Π±Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ².
Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠ²ΡΠ·ΡΡ
Π Entity Framework ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΏΠΎ ΡΠ²ΡΠ·ΡΠΌ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΠΈΠΏΠ°ΠΌΠΈ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠ°ΡΡΠ²ΡΠ΅Ρ. Π‘Π²ΠΎΠΉΡΡΠ²Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΏΠΎ ΡΠ²ΡΠ·ΡΠΌ Π² ΠΎΠ±ΠΎΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠΌΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΡΡΡΠ»ΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ (Π΅ΡΠ»ΠΈ ΠΊΡΠ°ΡΠ½ΠΎΡΡΡ ΡΠ°Π²Π½Π° ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ»ΠΈ Π½ΡΠ»Ρ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡ) ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ (Π΅ΡΠ»ΠΈ ΠΊΡΠ°ΡΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ). Code First ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ²ΡΠ·ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ²ΠΎΠΉΡΡΠ² Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ².
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ²ΠΎΠΉΡΡΠ² Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ° Π΄Π»Ρ ΡΠΈΠΏΠΎΠ², ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΡΠ±ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° ΠΈ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π·Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ², ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ: » > ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΠΌΠ΅Π½ΠΈ> ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°». ΠΡΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ, ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·Π°Π½ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ° Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ. ΠΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ° Code First ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΡΠ°ΡΠ½ΠΎΡΡΡ ΡΠ²ΡΠ·ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΡΡΠΈ null Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ°. ΠΡΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL, ΡΠΎ ΡΠ²ΡΠ·Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ²ΡΠ·Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠ»ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ NULL, code First ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΊΠ°ΡΠΊΠ°Π΄Π½ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ. ΠΡΠ»ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL, Code First Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΊΠ°ΡΠΊΠ°Π΄Π½ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ²ΡΠ·ΠΈ, Π° ΠΊΠΎΠ³Π΄Π° ΡΡΠ±ΡΠ΅ΠΊΡ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ, Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»ΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL. ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΡΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΊΠ°ΡΠΊΠ°Π΄Π½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ, ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ API.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ Department ΠΈ Course.
Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΈΠΏΠ°Ρ
ΠΠΎΠ³Π΄Π° Code First ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅ ΡΠ΄Π°Π΅ΡΡΡ Π²ΡΠ²Π΅ΡΡΠΈ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, ΠΈ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π½Π΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΌΠ΅ΡΠΎΠΊ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ API, ΡΠΈΠΏ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠΈΠΏ. ΠΠ»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠΈΠΏ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ², ΡΡΡΠ»Π°ΡΡΠΈΡ ΡΡ Π½Π° ΡΠΈΠΏΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Π½Π΅ ΡΡΡΠ»Π°ΡΡΠΈΡ ΡΡ Π½Π° Π½Π΅Π³ΠΎ ΠΈΠ· ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π£ΡΠΈΡΡΠ²Π°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Code First, Π²ΡΡΠ²ΠΈΡ, ΡΡΠΎ Details ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°.
Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΡΡΠΎΠΊΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ DbContext Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠΌ. ΡΡΠ°ΡΡΡ «ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ».
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π°Π»ΠΈΡΡ Π»ΡΠ±ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ System.Data.Entity.ModelConfiguration.Conventions. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ PluralizingTableNameConvention.
ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² EF6 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ . ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ «ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅».
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Code-First
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Entity Framework. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Code-First ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Code-First. ΠΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π²Π΅ ΡΠ°Π±Π»ΠΈΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ° Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅ ΠΈ Π΅Π³ΠΎ Π·Π°ΠΊΠ°Π·Π°ΠΌΠΈ. ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ Π±ΡΠ΄Π΅Ρ βΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌβ (one-to-many).
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠΎ Π²ΡΠ΅Ρ ΡΡΠ°ΡΡΡΡ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ°ΠΉΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠ²ΡΡΠ΅Π½Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Entity Framework, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ASP.NET. Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ, Π° ΠΏΠΎΠ·ΠΆΠ΅ Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΡΡΡ ΡΡΠ°ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π½Π΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΡΠ°Π³ΠΈ:
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Visual Studio 2012 (Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π²ΡΠ΅Ρ ΡΡΠ°ΡΠ΅ΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΡ Visual Studio 2012 Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ Entity Framework 6).
ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² (Class Library) ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ CodeFirst:
ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ°ΠΉΠ» ΠΊΠ»Π°ΡΡΠ° Model.cs, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡ CodeFirst Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ References Π² ΠΎΠΊΠ½Π΅ Solution Explorer Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠ½ΠΊΡ Add Reference. Π ΠΎΡΠΊΡΡΠ²ΡΠ΅ΠΌΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ Solution ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ CodeFirst.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ
ΠΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ Π·Π½Π°Π΅ΡΠ΅, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Code-First ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π² ΠΊΠΎΠ΄Π΅, Π° Π·Π°ΡΠ΅ΠΌ, Π½Π° Π΅Π΅ ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ (ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΡΡΡ) Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ°, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ° ΠΈ Π΅Π³ΠΎ ΡΠΎΠ²Π°ΡΡ. ΠΡΠΈ ΠΊΠ»Π°ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΡΠ°ΠΉΠ» Model.cs, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅:
ΠΠ»Π°ΡΡ Order ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π·Π°ΠΊΠ°Π·Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΊΠ°Π· Π² ΡΠ°Π±Π»ΠΈΡΠ΅. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΎΠ²Π°ΡΠ°, Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈ Π΄Π°ΡΡ Π·Π°ΠΊΠ°Π·Π°. Π’Π°ΠΊΠΆΠ΅ Π·Π΄Π΅ΡΡ ΡΠΊΠ°Π·Π°Π½Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΏΠΎΠΊΡΠΏΠ°ΡΠ΅Π»Ρ Π² Π²ΠΈΠ΄Π΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Customer.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Entity Framework 6 Π² ΠΏΡΠΎΠ΅ΠΊΡ
ΠΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Entity Framework Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Code-First, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ΄Π΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ EF, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Entity Framework Π² ΠΊΠΎΠ΄Π΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ:
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 4, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Entity Framework Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² NuGet. Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π² Entity Framework Ρ ΠΏΠΎΠΌΠΎΡΡΡ NuGet, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π² ΠΎΠΊΠ½Π΅ Solution Explorer ΠΏΡΠΎΠ΅ΠΊΡ CodeFirst, ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΠΎ Π½Π΅ΠΌΡ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ Manage Nuget Packages.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠΊΠ½ΠΎ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Entity Framework. Π‘ΠΎΠ³Π»Π°ΡΠΈΡΠ΅ΡΡ Ρ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌΠΈ ΠΈ Π½Π° ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ βI acceptβ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ NuGet ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π² Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Entity Framewrok.
ΠΠΎΠ²ΡΠΎΡΠΈΡΠ΅ ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π±Π΅Π· 4 ΠΏΡΠ½ΠΊΡΠ° Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Entity Framework Π² ΠΏΡΠΎΠ΅ΠΊΡ ASP.NET.
ΠΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΄Π°Π½Π½ΡΡ
Π‘Π°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΊΠ»Π°ΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΡΠ°Π½Π΅Π΅, Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ Ρ Entity Framework. ΠΠ° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΎΠ½ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π§ΡΠΎΠ±Ρ Entity Framework Π±ΡΠ» Π² ΠΊΡΡΡΠ΅, ΡΡΠΎ ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ ΡΠ»ΡΠΆΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. EF ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°:
ObjectContext
ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΄Π°Π½Π½ΡΡ , ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΠ°ΠΌΡΡ ΡΠ°Π½Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΉ Entity Framework.
DbContext
ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² Entity Framework 4.1 ΠΈ ΠΎΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Code-First (ObjectContext ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Code-First, Π½ΠΎ ΠΎΠ½ ΡΡΡΠ΄Π½Π΅Π΅ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ). ΠΠ°Π»Π΅Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ DbContext.
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ SampleContext Π² ΠΏΡΠΎΠ΅ΠΊΡ CodeFirst:
ΠΡΠΎΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ»ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ DbContext, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΠΎΡΠΈΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ, ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ»ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π² ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° DbContext ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π΅ΠΌΡ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. Π ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π»ΠΈΠ±ΠΎ ΠΈΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π»ΠΈΠ±ΠΎ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ (Entity Framework Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»Π΅Π½ ΡΡΠΎΠ±Ρ ΠΎΡΠ»ΠΈΡΠΈΡΡ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°). Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΠ²Π½ΠΎ ΠΈΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Ρ.ΠΊ. ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Entity Framework ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΄Π°Π½Π½ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ CodeFirst.SampleContext), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π³ΠΎΡΡΡΠ°Ρ ΠΊΠ»Π°Π²ΠΈΡΠ° F6 ), ΡΡΠΎΠ±Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅.
Π Π°Π±ΠΎΡΠ° Ρ Π΄Π°Π½Π½ΡΠΌΠΈ
Π Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΡΠΎΡΡΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ) Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ΄ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Entity Framework, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Π²ΡΡΠ°Π²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΡ. ΠΠΌΠ΅Ρ ΡΡΠΎ Π² Π²ΠΈΠ΄Ρ, Π½ΠΈΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Ρ ΡΠ°Π³ΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²Π΅Π±-ΡΠΎΡΠΌΡ Π² Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ :
ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ ΡΠΎΡΠΌΡ Π½Π° ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅:
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠΎΡΠΌΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π²ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ° Π² ΡΠ°Π±Π»ΠΈΡΡ Customers.
Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠ°ΠΉΠ» ΠΎΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²Π΅Π±-ΡΠΎΡΠΌΡ Default.aspx.cs ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π΄Π°Π½Π½ΡΡ ΡΠΎΡΠΌΡ:
Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ASP.NET β ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π°, ΠΏΡΠΈΡΠ΅Π΄ΡΠ΅Π³ΠΎ ΠΈΠ· ASP.NET MVC. ΠΠΎΠ»Π΅ Photo Ρ ΡΠ°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ² Π΄Π²ΠΎΠΈΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»Π° ΠΈ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΡΡΠ½ΡΡ. ΠΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΠΎΠ»Π΅ ΡΠΈΠΏΠ° byte[], ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Entity Framework ΠΏΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ»Π΅ Photo Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ BLOB (Binary Large OBject), ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΡΠΈΠΏ VARBINARY(max)).
ΠΠΎΠ΄ ΡΠ°Π±ΠΎΡΡ Ρ Entity Framework Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° SampleContext ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΅Π³ΠΎ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΡ Customers. ΠΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° SaveChanges() ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΡΠ°Π²ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ Π²ΡΠ·ΠΎΠ² SaveChanges() ΡΠΎΠ·Π΄Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Π²Π΅Π΄ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΎΡΠΌΡ ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ βΠΡΡΠ°Π²ΠΈΡΡ Π² ΠΠβ:
ΠΠΎΡΠ»Π΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΡΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΡ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠΎΠ². ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π·Π°ΠΌΠ΅ΡΠ½Π°Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠ° Π² ΠΎΡΠ²Π΅ΡΠ΅ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° β ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ³Π΄Π° Π²Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΠ΅ ΡΠΎΡΠΌΡ Π²ΡΠΎΡΠΎΠΉ ΡΠ°Π·, ΡΡΠ° Π·Π°Π΄Π΅ΡΠΆΠΊΠ° ΠΈΡΡΠ΅Π·Π°Π΅Ρ, Ρ.ΠΊ. Π΄Π°Π½Π½ΡΠ΅ Π²ΡΡΠ°Π²Π»ΡΡΡΡΡ Π² ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΠ΄Π΅Π»Π°Π½Π½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΎΡΠΎΠ±ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΡΡΠΊΡΡΡΠ° ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΠΎΠΊΠ½ΠΎ Server Explorer Π² Visual Studio, Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ Connect to Database, Π² ΠΎΡΠΊΡΡΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊ SQL Server ΠΈ Π½Π°ΡΡΡΠΎΠΉΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ MyShop, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ° β.\SQLEXPRESSβ Π² ΠΎΠΊΠ½Π΅ Add Connection. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π² ΠΎΠΊΠ½Π΅ Server Explorer ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅:
ΠΠ±ΡΠ°ΡΠΈΠ² ΠΏΡΠΈΡΡΠ°Π»ΡΠ½ΡΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π° ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡ, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΎ ΠΏΡΠΎΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΡΠ½ΠΎΡΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Code-First. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ²ΠΎΠΉΡΡΠ²Π° CustomerId ΠΈ OrderId Π² ΡΡΡΠ½ΠΎΡΡΠ½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Entity Framework ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π» Π² ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ (EF Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΠ΅Ρ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΡ βIdβ Π² ΠΈΠΌΠ΅Π½Π°Ρ ΡΠ²ΠΎΠΉΡΡΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ). ΠΡΠΈ ΠΏΠΎΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π°Π²ΡΠΎΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ IDENTITY (1,1) ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL.
Π² Entity Framework ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎΠ±Ρ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΡΠΎΡΠ»Π°ΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ, Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅. Π Code-First Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ 0..1-1, 1-1 ΠΈ many-to-many Π² ΡΠ°Π±Π»ΠΈΡΠ°Ρ , Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ ΠΏΠΎΠ·ΠΆΠ΅, ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΌ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² Entity Framework.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Entity Framework ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΡΠ°Π±Π»ΠΈΡΡ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ __MigrationHistory. ΠΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Ρ ΡΠ°Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π² ΠΏΠΎΠ»Π΅ Model ΡΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Ρ ΡΠ°Π½ΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° BLOB. ΠΡΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ Π²Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅, Entity Framework Π²ΡΡΠ°Π²ΠΈΡ Π² ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π½ΠΎΠ²ΡΡ Π·Π°ΠΏΠΈΡΡ, Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ΅Π΄ΡΡΠ² Entity Framework. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² C# ΠΈΠ»ΠΈ ΡΡΡΠΎΠ³Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Fluent API.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
ΠΠ½Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΉ ΡΠΎΡΠΌΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΊΠ»Π°ΡΡΠ° Π² Π²ΠΈΠ΄Π΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². ΠΡΠΈ Π°ΡΡΠΈΠ±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΡΠ±ΠΎΡΠΊΠΈ System.ComponentModel.DataAnnotations.dll ΠΈ EntityFramework.dll. ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Entity Framework, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π½Π΅Π»ΡΠ·Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Fluent API.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅, Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠ·ΡΠΊΠ° C# ΠΈΠ»ΠΈ Visual Basic. Π ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π² C#, Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠ»ΡΡΠ° Π² C# ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ:
Π° Π² Visual Basic, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ³Π»ΠΎΠ²ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ:
Π Π°ΡΡΠΈΠ±ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, Π² C# ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π½Π°ΠΊΠ° ΡΠ°Π²Π΅Π½ΡΡΠ²Π°:
Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Visual Basic ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄ Π·Π½Π°ΠΊΠΎΠΌ ΡΠ°Π²Π΅Π½ΡΡΠ²Π°:
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΊΠ»Π°ΡΡΡ Customer. ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π±Ρ Ρ ΠΎΡΠ΅Π» ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π² ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅:
ΠΠΎΠ»Π΅ Name Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Π΄Π»ΠΈΠ½Π° ΠΏΠΎΠ»Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ 30 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΏΠΎΠ»Ρ email Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ 100 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
ΠΠΎΠ»Π΅ Age Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΡ 8 Π΄ΠΎ 100.
Π€ΠΎΡΠΎΠ³ΡΠ°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠΈΠΏΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Image SQL Server, Π° Π½Π΅ Π² VARBINARY (max).
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ System.ComponentModel.DataAnnotations ΠΈ System.ComponentModel.DataAnnotations.Schema Π² ΡΠ°ΠΉΠ»Π΅ Model.cs ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ CodeFirst. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠ»Π°ΡΡΠ° Customer, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅:
ΠΡΡΠΈΠ±ΡΡ Required Π½Π΅ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠ°ΠΊ Π² Π°ΡΡΠΈΠ±ΡΡΠ°Ρ MaxLength, Range ΠΈ Column ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°Π½Ρ. ΠΡΡΠΈΠ±ΡΡ Column Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΡ Π΅ΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΡ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ ΡΡΠΎΠ»Π±ΡΠ° ΡΠ°Π±Π»ΠΈΡΡ). ΠΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ System.ComponentModel.DataAnnotations.Schema, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². ΠΠ½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΡΠ΅ΠΌΡΠΌΠΈ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° Name.
ΠΠΎΠΌΠΈΠΌΠΎ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²Π»ΠΈΡΡΡ Π½Π° ΡΡΡΡΠΊΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ System.ComponentModel.DataAnnotations ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Entity Framework ΠΏΡΠΎΡΡΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ (Π°ΡΡΠΈΠ±ΡΡ Range, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π²ΡΡΠ΅, Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊ ΡΠΈΠΏΡ Name ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡ [MinLegth(3)], ΡΡΠΎΠ±Ρ Π½Π΅Π»ΡΠ·Ρ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠΊΡΠΏΠ°ΡΠ΅Π»Ρ ΡΡΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΠ΅ 3 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π T-SQL Π½Π΅Π»ΡΠ·Ρ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π΄Π»ΠΈΠ½Ρ ΠΏΠΎΠ»Ρ (Ρ ΠΎΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ CASE), ΠΏΠΎΡΡΠΎΠΌΡ Entity Framework Π±ΡΠ΄Π΅Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ Π°ΡΡΠΈΠ±ΡΡ. ΠΡΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π°ΡΡΠΈΠ±ΡΡΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ , ΡΠ²Π»ΡΡΡΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Entity Framework. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΡΡΠΈΠ±ΡΡΡ MinLegth ΠΈ Range ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ASP.NET.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ Π²Π½Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ , Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΊΠ°ΠΊ Enity Framework ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠ»ΠΈ Π²Ρ ΡΠ΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π²ΡΡΠ°Π²ΠΈΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ°, ΡΠΎ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ InvalidOperationException. ΠΡ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΏΠΎΡΠΎΠ±Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΌ Π² Code-First. ΠΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΡΠ΅ΠΊΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ:
Π£ Π²Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΡΡΠ½ΡΡ ΡΠ΄Π°Π»ΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ½ΠΎΠ²Π°, ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΡΠ°Π²ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π½ΠΎΠ²Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π·Π°ΡΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ², Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΡΡΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΡΡΠ³ΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Code-First ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΄Π°Π»ΡΡΡ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Code-First Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° SetInitializer() ΠΊΠ»Π°ΡΡΠ° Database. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° CreateDatabaseIfNotExists, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π° Π΅ΡΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ, ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° DropCreateDatabaseIfModelChanges, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Code-First, ΡΡΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ , Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈ Π²ΠΎΡΡΠΎΠ·Π΄Π°ΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ. ΠΠ΅ΡΠΎΠ΄ SetInitializer() Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Entity Framework, Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·Π²Π°ΡΡ Π΅Π³ΠΎ Π² Π½Π°ΡΠ°Π»Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° Page_Load:
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π²ΡΡΠ°Π²ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅, Code First Π½Π°ΠΉΠ΄Π΅Ρ ΡΠ°Π·Π½ΠΈΡΡ Π² Π½ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ, Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°, ΡΠ΄Π°Π»ΠΈΡ ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠ»ΠΈ Π²Ρ ΠΎΡΠΊΡΡΠ»ΠΈ ΡΠ°Π±Π»ΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π³Π΄Π΅-ΡΠΎ Π΅ΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΎΠΊΠ½Π΅ Server Explorer ΡΡΠ΅Π΄Ρ Visual Studio), Code First Π±ΡΠ΄Π΅Ρ Π½Π΅ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Ρ.ΠΊ. ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ Π·Π°ΠΌΠ΅ΡΠ½Π°Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠ° ΠΏΡΠΈ Π²ΡΡΠ°Π²ΠΊΠ΅ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠΊΠ° EF ΠΏΡΡΠ°Π΅ΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π° Π·Π°ΡΠ΅ΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅:
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π·Π°ΡΠ°ΡΡΡΡ Ρ Π²Π°ΡΠ°Π΅Ρ Π·Π°ΠΊΡΡΡΡ ΠΈ ΠΎΡΠΊΡΡΡΡ ΡΠ½ΠΎΠ²Π° ΠΏΡΠΎΠ΅ΠΊΡ Π² Visual Studio.
Π― ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²Π°ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΡΠ°Π±ΠΎΡΠ΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΡΡΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ T-SQL, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΡΡΠ°ΠΆΠ°Π΅ΡΠ΅ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ°Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Π΅ΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ Code-Second. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π»ΠΈΡΠ°Π΅Ρ Π²Π°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π³Π»Π°Π²Π½ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² Code-First β ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π΅ ΡΠ΄Π°Π»ΡΡ Π΅Π΅ (ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠ΄Π°Π»ΡΡΡ ΡΠΆΠ΅ Π²ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅).
ΠΠΎΠΏΡΡΡΠΈΠΌ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Customer ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΈΠΌΡ ΡΡΠΎΠ»Π±ΡΠ° Name Π½Π° FirstName ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π½ΠΎΠ²ΡΠΉ ΡΡΠΎΠ»Π±Π΅Ρ LastName. Π§ΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ Code-Second Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ:
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ SQL Server Management Studio ΠΈΠ»ΠΈ ΠΎΠΊΠ½ΠΎ Server Explorer Π² Visual Studio ΡΠ΄Π°Π»ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ __MigrationHistory.
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ SQL-ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡ (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΡ Customer Π² ΠΎΠΊΠ½Π΅ Server Explorer ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ New Query):
ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°Π·ΠΈΡΡ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
ΠΠ°Π»Π΅Π΅ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ Π²Π΅Π±-ΡΠΎΡΠΌΡ ΠΈ ΠΊΠΎΠ΄ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
Π ΠΊΠΎΠ΄Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Default.aspx.cs ΡΠ΄Π°Π»ΠΈΡΠ΅ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° SetInitializer().
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΡΠ°Π²ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π² Π±Π°Π·Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π²ΡΡΠ°Π²ΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅ Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ Π΄Π΅Π»ΠΈΡΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Fluent API
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ, Π½ΠΎ ΠΎΠ½Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ many-to-many ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ. Π΄Π°Π΅Ρ Π²Π°ΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΊΠΈΠΌ Π³Π»ΡΠ±ΠΎΠΊΠΈΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Fluent API Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ΄Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° IntelliSense Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΊΠΎΠ΄Π° Visual Studio ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Code-First Fluent API, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Entity(), ΡΡΠΎΠ±Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. IntelliSense ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π²Π°ΠΌ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Property(), ΡΡΠΎΠ±Ρ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΡΠ½ΠΎΡΡΠΈ, ΡΠΎ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π²ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ Fluent API ΠΏΠ΅ΡΠ΅Π΄ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ Π·Π°ΡΠΎΡΡΠ΅Ρ ΠΊΠΎΠ΄ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅Ρ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ³Π΄Π° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ΠΌΡ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ, DbContext ΡΠΌΠΎΡΡΠΈΡ Π½Π° ΡΡΡΡΠΊΡΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ. Fluent API ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° DbContext.OnModelCreating(), ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠΎΡΡΡΠΎΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° Fluent API.
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ:
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° DbModelBuilder Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ° DbModelBuilder ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΈΠΏΡ Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠ²), Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅ΠΌΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π±ΡΡΡΡΠ°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ°Π±Π»ΠΈΡΡ Customer, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΡΠ°Π½Π΅Π΅ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ:
ΠΠΎΠ΄Ρ ΠΎΠ΄Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΠΈ Fluent API ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Code-First, ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΎΡΠ΄Π°Π΅ΡΡΡ Fluent API.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Fluent API, ΡΠΎ ΠΊΠΎΠ΄ ΠΌΠ΅ΡΠΎΠ΄Π° OnModelCreating() ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡΡΠΎ ΡΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΡΠΌ. ΠΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Fluent API Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΡ ΠΎΡ EntityTypeConfiguration. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ» EntityConfigurations.cs Π² ΠΏΡΠΎΠ΅ΠΊΡ CodeFirst:
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π² Π²ΡΠ·ΠΎΠ²Π΅ OnModelCreating() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Configurations ΠΊΠ»Π°ΡΡΠ° DbModelBuilder:
ΠΠ° ΡΡΠΎΠΌ ΠΌΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Code-First, ΠΏΠΎΠ·ΠΆΠ΅, ΠΏΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Entity Framework, ΠΌΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π΄Π°Π½Π½ΡΡ ΠΈ Fluent API.
Code First Conventions
A detailed list of Code First conventions is available in the API Documentation. This topic provides an overview of the conventions used by Code First.
Type Discovery
If your types participate in an inheritance hierarchy, it is enough to define a DbSet property for the base class, and the derived types will be automatically included, if they are in the same assembly as the base class.
In the following example, there is only one DbSet property defined on the SchoolEntities class (Departments). Code First uses this property to discover and pull in any referenced types.
If you want to exclude a type from the model, use the NotMapped attribute or the DbModelBuilder.Ignore fluent API.
Primary Key Convention
Code First infers that a property is a primary key if a property on a class is named Π²ΠΡIDΠ²ΠΡ (not case sensitive), or the class name followed by «ID». If the type of the primary key property is numeric or GUID it will be configured as an identity column.
Relationship Convention
In Entity Framework, navigation properties provide a way to navigate a relationship between two entity types. Every object can have a navigation property for every relationship in which it participates. Navigation properties allow you to navigate and manage relationships in both directions, returning either a reference object (if the multiplicity is either one or zero-or-one) or a collection (if the multiplicity is many). Code First infers relationships based on the navigation properties defined on your types.
In addition to navigation properties, we recommend that you include foreign key properties on the types that represent dependent objects. Any property with the same data type as the principal primary key property and with a name that follows one of the following formats represents a foreign key for the relationship: ‘
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Code First
ΠΡΠΎ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΠ±ΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Code First, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π½Π°ΡΠ΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΈ Code First ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ»ΠΈ ΠΏΡΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π² ΠΊΠΎΡΠΎΡΡΡ Code First Π΄ΠΎΠ±Π°Π²ΠΈΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ. Code First ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ C# ΠΈΠ»ΠΈ VB.Net ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡΠ² ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ API.
ΠΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΠΈΠ΄Π΅ΠΎ
ΠΡΠΎ Π²ΠΈΠ΄Π΅ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Code First, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π½Π°ΡΠ΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΈ Code First ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ»ΠΈ ΠΏΡΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π² ΠΊΠΎΡΠΎΡΡΡ Code First Π΄ΠΎΠ±Π°Π²ΠΈΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ. Code First ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ C# ΠΈΠ»ΠΈ VB.Net ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡΠ² ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ API.
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Visual Studio 2010 ΠΈΠ»ΠΈ Visual Studio 2012.
1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π§ΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π΅ Code First Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ.
2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡ ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅ Program.cs, Π½ΠΎ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠΎΠ΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ° Program Π² Program.cs Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π° ΠΊΠ»Π°ΡΡΠ°.
ΠΡ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅, ΡΡΠΎ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ Π΄Π²Π° ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ (Blog.Posts ΠΈ Post.Blog) Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Entity Framework. ΠΡΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½ΠΈΠΌ.
3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠ΅Π°Π½Ρ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΎΡ System.Data.Entity.DbContext ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ dbSet Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡ ΠΈΠ· Entity Framework, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ NuGet EntityFramework.
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ using Π΄Π»Ρ System.Data.Entity Π² Π½Π°ΡΠ°Π»ΠΎ Π€Π°ΠΉΠ»Π° Program.cs.
ΠΠΎΠ΄ ΠΊΠ»Π°ΡΡΠΎΠΌ Post Π² Program.cs Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Program.cs.
ΠΡΠΎ Π²Π΅ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΠ°ΡΡ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΠΊΡΠ»ΠΈΡΠ°ΠΌΠΈ, ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΡΠΎ Π² ΠΌΠ³Π½ΠΎΠ²Π΅Π½ΠΈΠ΅, Π½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π΅Π³ΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ.
4. Π§ΡΠ΅Π½ΠΈΠ΅ & Π΄Π°Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΠΈ
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Main Π² Π€Π°ΠΉΠ»Π΅ Program.cs, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΅Π³ΠΎ Π΄Π»Ρ Π²ΡΡΠ°Π²ΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠ³Π°. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ LINQ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π±Π»ΠΎΠ³ΠΎΠ² ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π² Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ.
ΠΠ΄Π΅ ΠΌΠΎΠΈ Π΄Π°Π½Π½ΡΠ΅?
ΠΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ DbContext ΡΠΎΠ·Π΄Π°Π»Π° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π²Π°Ρ.
ΠΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ code First ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ «ΠΠ°ΠΊ DbContext ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ «. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΡΡΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π² Visual Studio
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ β> ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ²
Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ «ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅».
ΠΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ»ΠΈΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ Microsoft SQL Server Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ LocalDB ΠΈΠ»ΠΈ SQL Express Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡ Π΅ΠΌΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ code First.
DbContext ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π» ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π² ΡΠ²ΠΎΠΉΡΡΠ²Π° DbSet, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ. ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ Code First ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ ΡΠ°Π±Π»ΠΈΡ ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΈ Ρ. Π΄. ΠΠ°Π»Π΅Π΅ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠΈ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ.
5. Π Π°Π±ΠΎΡΠ° Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ Π²Π½Π΅ΡΡΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²Π½ΠΎΡΡ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΡ Π΅ΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Code First Migrations ΠΈΠ»ΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ.
ΠΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π°ΠΌ ΠΈΠΌΠ΅ΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΠ°Π³ΠΎΠ², ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ (ΠΈ ΠΏΠΎΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ²Π½Ρ) ΡΡ Π΅ΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΡΠΈΡ ΡΠ°Π³ΠΎΠ², ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΊΠ°ΠΊ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Code First Migrations Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ BloggingContext.
Π‘ΡΠ΅Π΄ΡΡΠ²Π° β> Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ β> ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Enable-Migrations Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
Π Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π½ΠΎΠ²Π°Ρ ΠΏΠ°ΠΏΠΊΠ° Migrations, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ Π΄Π²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°:
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π½Π΅ΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π½Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ URL-Π°Π΄ΡΠ΅ΡΠ° Π² ΠΊΠ»Π°ΡΡ Blog:
ΠΠΎΠ²ΡΠΉ ΡΡΠΎΠ»Π±Π΅Ρ URL-Π°Π΄ΡΠ΅ΡΠ° ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΡ «ΠΠ»ΠΎΠ³ΠΈ» Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ :
6. ΠΠ°ΠΌΠ΅ΡΠΊΠΈ ΠΊ Π΄Π°Π½Π½ΡΠΌ
ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ EF ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½ΠΎ Π±ΡΠ΄ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π°, ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΠΈ ΠΊΠ»Π°ΡΡΡ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌ, ΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ°. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΊ Π΄Π°Π½Π½ΡΠΌ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ API Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅.
ΠΠΎΠ²Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ :
ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΌΠ΅ΡΠΎΠΊ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ EF:
7. API Fluent
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΌΠ΅ΡΠΎΠΊ ΠΊ Π΄Π°Π½Π½ΡΠΌ Π΄Π»Ρ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ API Code First fluent.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΡΡΡ Π·Π°ΠΌΠ΅ΡΠΎΠΊ ΠΊ Π΄Π°Π½Π½ΡΠΌ. Π’Π΅ΠΊΡΡΠΈΠΉ API β ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠ³ΡΡ Π΄Π΅Π»Π°ΡΡ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΊ Π΄Π°Π½Π½ΡΠΌ, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Ρ Π·Π°ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ ΠΊ Π΄Π°Π½Π½ΡΠΌ. ΠΠ°ΠΌΠ΅ΡΠΊΠΈ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ API ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΌΡ API, ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ OnModelCreating Π² DbContext. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΡΡΠΎΠ»Π±Π΅Ρ, Π² ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠ°Π½ΠΈΡΡΡ User.DisplayName, Π² display_name.
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΎΠ»Π±Π΅Ρ DisplayName ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ Π² display_name:
Π‘Π²ΠΎΠ΄ΠΊΠ°
Π ΡΡΠΎΠΌ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Code First Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΅Π΅ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Code First Migrations Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡ Π΅ΠΌΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΌΠ΅ΡΠΎΠΊ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΈ API Fluent.
Code First to a New Database
This video and step-by-step walkthrough provide an introduction to Code First development targeting a new database. This scenario includes targeting a database that doesnΠ²Π™t exist and Code First will create, or an empty database that Code First will add new tables to. Code First allows you to define your model using C# or VB.Net classes. Additional configuration can optionally be performed using attributes on your classes and properties or by using a fluent API.
Watch the video
This video provides an introduction to Code First development targeting a new database. This scenario includes targeting a database that doesnΠ²Π™t exist and Code First will create, or an empty database that Code First will add new tables to. Code First allows you to define your model using C# or VB.Net classes. Additional configuration can optionally be performed using attributes on your classes and properties or by using a fluent API.
Presented By: Rowan Miller
Pre-Requisites
You will need to have at least Visual Studio 2010 or Visual Studio 2012 installed to complete this walkthrough.
If you are using Visual Studio 2010, you will also need to have NuGet installed.
1. Create the Application
To keep things simple weΠ²Π™re going to build a basic console application that uses Code First to perform data access.
2. Create the Model
LetΠ²Π™s define a very simple model using classes. WeΠ²Π™re just defining them in the Program.cs file but in a real world application you would split your classes out into separate files and potentially a separate project.
Below the Program class definition in Program.cs add the following two classes.
YouΠ²Π™ll notice that weΠ²Π™re making the two navigation properties (Blog.Posts and Post.Blog) virtual. This enables the Lazy Loading feature of Entity Framework. Lazy Loading means that the contents of these properties will be automatically loaded from the database when you try to access them.
3. Create a Context
Now itΠ²Π™s time to define a derived context, which represents a session with the database, allowing us to query and save data. We define a context that derives from System.Data.Entity.DbContext and exposes a typed DbSet for each class in our model.
WeΠ²Π™re now starting to use types from the Entity Framework so we need to add the EntityFramework NuGet package.
Add a using statement for System.Data.Entity at the top of Program.cs.
Below the Post class in Program.cs add the following derived context.
Here is a complete listing of what Program.cs should now contain.
That is all the code we need to start storing and retrieving data. Obviously there is quite a bit going on behind the scenes and weΠ²Π™ll take a look at that in a moment but first letΠ²Π™s see it in action.
4. Reading & Writing Data
Implement the Main method in Program.cs as shown below. This code creates a new instance of our context and then uses it to insert a new Blog. Then it uses a LINQ query to retrieve all Blogs from the database ordered alphabetically by Title.
You can now run the application and test it out.
WhereΠ²Π™s My Data?
By convention DbContext has created a database for you.
These are just the default conventions and there are various ways to change the database that Code First uses, more information is available in the How DbContext Discovers the Model and Database Connection topic. You can connect to this database using Server Explorer in Visual Studio
Right click on Data Connections and select Add ConnectionΠ²ΠΒ¦
If you havenΠ²Π™t connected to a database from Server Explorer before youΠ²Π™ll need to select Microsoft SQL Server as the data source
Connect to either LocalDB or SQL Express, depending on which one you have installed
We can now inspect the schema that Code First created.
DbContext worked out what classes to include in the model by looking at the DbSet properties that we defined. It then uses the default set of Code First conventions to determine table and column names, determine data types, find primary keys, etc. Later in this walkthrough weΠ²Π™ll look at how you can override these conventions.
5. Dealing with Model Changes
Now itΠ²Π™s time to make some changes to our model, when we make these changes we also need to update the database schema. To do this we are going to use a feature called Code First Migrations, or Migrations for short.
Migrations allows us to have an ordered set of steps that describe how to upgrade (and downgrade) our database schema. Each of these steps, known as a migration, contains some code that describes the changes to be applied.Π
The first step is to enable Code First Migrations for our BloggingContext.
Run the Enable-Migrations command in Package Manager Console
A new Migrations folder has been added to our project that contains two items:
Now letΠ²Π™s make a change to our model, add a Url property to the Blog class:
The new Url column is now added to the Blogs table in the database:
6. Data Annotations
So far weΠ²Π™ve just let EF discover the model using its default conventions, but there are going to be times when our classes donΠ²Π™t follow the conventions and we need to be able to perform further configuration. There are two options for this; weΠ²Π™ll look at Data Annotations in this section and then the fluent API in the next section.
The new table is now added to the database:
The full list of annotations supported by EF is:
7. Fluent API
In the previous section we looked at using Data Annotations to supplement or override what was detected by convention. The other way to configure the model is via the Code First fluent API.
Most model configuration can be done using simple data annotations. The fluent API is a more advanced way of specifying model configuration that covers everything that data annotations can do in addition to some more advanced configuration not possible with data annotations. Data annotations and the fluent API can be used together.
To access the fluent API you override the OnModelCreating method in DbContext. LetΠ²Π™s say we wanted to rename the column that User.DisplayName is stored in to display_name.
The DisplayName column is now renamed to display_name:
Summary
In this walkthrough we looked at Code First development using a new database. We defined a model using classes then used that model to create a database and store and retrieve data. Once the database was created we used Code First Migrations to change the schema as our model evolved. We also saw how to configure a model using Data Annotations and the Fluent API.
Code First to an Existing Database
ΠΡΠΎ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Code First, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Code First ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ C# ΠΈΠ»ΠΈ VB.Net ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡΠ² ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ API.
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Visual Studio 2012 ΠΈΠ»ΠΈ Visual Studio 2013.
1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΎΠ½Π° ΡΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π°, Π½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ°.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΡΠΊΡΡΡΠΈΠ΅ Visual Studio
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ β> ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ²
Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ β> Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ»ΠΈΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ Microsoft SQL Server Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ LocalDB ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅ blogging Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ», ΠΈ Π²Π°ΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ°«
ΠΠΎΠ²Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π² ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Π΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ Π΅Π΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ «Π‘ΠΎΠ·Π΄Π°ΡΡ Π·Π°ΠΏΡΠΎΡ».
Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ SQL Π² Π½ΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ Π·Π°ΠΏΡΠΎΡ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ «ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ».
2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π§ΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ, ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π΅ Code First Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ:
3. ΠΠΎΠ΄Π΅Π»Ρ ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Entity Framework Π΄Π»Ρ Visual Studio, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ . ΠΡΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²Π²ΠΎΠ΄ΠΈΡΡ Π²ΡΡΡΠ½ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅.
ΠΡΠΎΠ΅ΠΊΡ β> Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ «ΠΠ°Π½Π½ΡΠ΅ » Π² ΠΌΠ΅Π½Ρ ΡΠ»Π΅Π²Π°, Π° Π·Π°ΡΠ΅ΠΌ ADO.NET ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ ΡΡΡΠ½ΠΎΡΡΠΈ
ΠΠ²Π΅Π΄ΠΈΡΠ΅ bloggingContext Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ»
ΠΡΠΊΡΠΎΠ΅ΡΡΡ ΠΌΠ°ΡΡΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ.
ΠΡΠ±Π΅ΡΠΈΡΠ΅ code First ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ°Π»Π΅Π΅»
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ°Π»Π΅Π΅»
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ»Π°ΠΆΠΎΠΊ ΡΡΠ΄ΠΎΠΌ Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ, ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠΎΡΠΎΠ²ΠΎ«
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ.
Π€Π°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
Π€Π°ΠΉΠ» App.config Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
ΠΡ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ EF ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΠ±ΡΠ°ΡΡ Code First, Π³Π΄Π΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π±ΡΠ΄ΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ
ΠΠ»Π°ΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ
4. Π§ΡΠ΅Π½ΠΈΠ΅ & Π΄Π°Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΠΈ
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ.
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΌΠΎΡ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ?
ΠΠ°ΡΡΠ΅Ρ code First to Database ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ. ΠΡΠ»ΠΈ ΡΡ Π΅ΠΌΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ»Π°ΡΡΡ ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠ»Π°ΡΡΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Code First Migrations ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Code First Migrations Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΡΠΌ. Code First Migrations Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
Π‘Π²ΠΎΠ΄ΠΊΠ°
Π ΡΡΠΎΠΌ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Code First Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Entity Framework Π΄Π»Ρ Visual Studio Π΄Π»Ρ ΡΠ΅ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°Π±ΠΎΡΠ° ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΠΈ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
Tutorial: Get Started with Entity Framework 6 Code First using MVC 5
For new development, we recommend ASP.NET Core Razor Pages over ASP.NET MVC controllers and views. For a tutorial series similar to this one using Razor Pages, see Tutorial: Get started with Razor Pages in ASP.NET Core. The new tutorial:
In this series of tutorials, you learn how to build an ASP.NET MVC 5 application that uses Entity Framework 6 for data access. This tutorial uses the Code First workflow. For information about how to choose between Code First, Database First, and Model First, see Create a model.
This tutorial series explains how to build the Contoso University sample application. The sample application is a simple university website. With it, you can view and update student, course, and instructor information. Here are two of the screens you create:
In this tutorial, you:
Prerequisites
Create an MVC web app
Open Visual Studio and create a C# web project using the ASP.NET Web Application (.NET Framework) template. Name the project ContosoUniversity and select OK.
By default, the Authentication option is set to No Authentication. For this tutorial, the web app doesn’t require users to sign in. Also, it doesn’t restrict access based on who’s signed in.
Select OK to create the project.
Set up the site style
A few simple changes will set up the site menu, layout, and home page.
Open Views\Shared\_Layout.cshtml, and make the following changes:
The changes are highlighted in the following code snippet:
In Views\Home\Index.cshtml, replace the contents of the file with the following code to replace the text about ASP.NET and MVC with text about this application:
Press Ctrl+F5 to run the web site. You see the home page with the main menu.
Install Entity Framework 6
From the Tools menu, choose NuGet Package Manager, and then choose Package Manager Console.
In the Package Manager Console window, enter the following command:
This step is one of a few steps that this tutorial has you do manually, but that could have been done automatically by the ASP.NET MVC scaffolding feature. You’re doing them manually so that you can see the steps required to use Entity Framework (EF). You’ll use scaffolding later to create the MVC controller and views. An alternative is to let scaffolding automatically install the EF NuGet package, create the database context class, and create the connection string. When you’re ready to do it that way, all you have to do is skip those steps and scaffold your MVC controller after you create your entity classes.
Create the data model
Next you’ll create entity classes for the Contoso University application. You’ll start with the following three entities:
Course Enrollment Student
| Entities | Relationship |
|---|---|
| Course to Enrollment | One-to-many |
| Student to Enrollment | One-to-many |
There’s a one-to-many relationship between Student and Enrollment entities, and there’s a one-to-many relationship between Course and Enrollment entities. In other words, a student can be enrolled in any number of courses, and a course can have any number of students enrolled in it.
In the following sections, you’ll create a class for each one of these entities.
If you try to compile the project before you finish creating all of these entity classes, you’ll get compiler errors.
The Student entity
In the Models folder, create a class file named Student.cs by right-clicking on the folder in Solution Explorer and choosing Add > Class. Replace the template code with the following code:
The ID property will become the primary key column of the database table that corresponds to this class. By default, Entity Framework interprets a property that’s named ID or classname ID as the primary key.
The Enrollments property is a navigation property. Navigation properties hold other entities that are related to this entity. In this case, the Enrollments property of a Student entity will hold all of the Enrollment entities that are related to that Student entity. In other words, if a given Student row in the database has two related Enrollment rows (rows that contain that student’s primary key value in their StudentID foreign key column), that Student entity’s Enrollments navigation property will contain those two Enrollment entities.
Navigation properties are typically defined as virtual so that they can take advantage of certain Entity Framework functionality such as lazy loading. (Lazy loading will be explained later, in the Reading Related Data tutorial later in this series.)
The Enrollment entity
In the Models folder, create Enrollment.cs and replace the existing code with the following code:
The EnrollmentID property will be the primary key; this entity uses the classname ID pattern instead of ID by itself as you saw in the Student entity. Ordinarily you would choose one pattern and use it throughout your data model. Here, the variation illustrates that you can use either pattern. In a later tutorial, you’ll see how using ID without classname makes it easier to implement inheritance in the data model.
The Grade property is an enum. The question mark after the Grade type declaration indicates that the Grade property is nullable. A grade that’s null is different from a zero grade Π²Πβ null means a grade isn’t known or hasn’t been assigned yet.
Entity Framework interprets a property as a foreign key property if it’s named
Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ. ΠΠ°ΡΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ Entity Framework 6 Code First Ρ ΠΏΠΎΠΌΠΎΡΡΡ MVC 5
ΠΠ»Ρ Π½ΠΎΠ²ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ASP.NET Core Razor Pages ΠΏΠΎ ASP.NET ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌ MVC. Π‘Π΅ΡΠΈΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ², Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΡΡΠΎΠΉ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ Razor Pages, ΡΠΌ. Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΠΎ Π½Π°ΡΠ°Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Razor Pages Π² ASP.NET Core. ΠΠΎΠ²ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ.
Π ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ² Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ASP.NET MVC 5, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π΅ Entity Framework 6 Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ. Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Code First. Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ Π²ΡΠ±ΠΎΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ code First, Database First ΠΈ Model First ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ «Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ».
Π ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ² ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Contoso University. ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ Π²Π΅Π±-ΡΠ°ΠΉΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΡΠ°ΡΠΈΡ ΡΡ, ΠΊΡΡΡΠ°Ρ ΠΈ ΠΏΡΠ΅ΠΏΠΎΠ΄Π°Π²Π°ΡΠ΅Π»ΡΡ . ΠΠΎΡ Π΄Π²Π° ΡΠΊΡΠ°Π½Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅:
ΠΠ·ΡΡΠΈΠ² ΡΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, Π²Ρ:
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ MVC
Π Π½ΠΎΠ²ΠΎΠΌ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ASP.NET β ContosoUniversity Π²ΡΠ±Π΅ΡΠΈΡΠ΅ MVC.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° «ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡΠΈ » Π·Π°Π΄Π°Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ «ΠΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡΠΈ«. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠΈΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π²Ρ ΠΎΠ΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠ½ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» Π²Ρ ΠΎΠ΄.
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΠ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΡΠΈΠ»Ρ ΡΠ°ΠΉΡΠ°
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΌΠ΅Π½Ρ, ΠΌΠ°ΠΊΠ΅ΡΠ° ΠΈ Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ°ΠΉΡΠ°.
ΠΡΠΊΡΠΎΠΉΡΠ΅ views\Shared\_Layout.cshtml ΠΈ Π²Π½Π΅ΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ:
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΠ΄Π΅Π»Π΅Π½Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π°:
Π Views\Home\Index.cshtml Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡ ΠΎ ASP.NET ΠΈ MVC ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΎΠ± ΡΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:
ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ CTRL+F5, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π²Π΅Π±-ΡΠ°ΠΉΡ. ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π΄ΠΎΠΌΠ°ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Ρ Π³Π»Π°Π²Π½ΡΠΌ ΠΌΠ΅Π½Ρ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Entity Framework 6
Π ΠΌΠ΅Π½Ρ «Π‘Π΅ΡΠ²ΠΈΡ» Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² NuGet ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
Π ΠΎΠΊΠ½Π΅ ΠΠΎΠ½ΡΠΎΠ»Ρ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΡΠΎΡ ΡΠ°Π³ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°Π³ΠΎΠ², Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π² ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ Π²ΡΡΡΠ½ΡΡ, Π½ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² MVC ASP.NET MVC. ΠΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ ΠΈΡ Π²ΡΡΡΠ½ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°Π³ΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Entity Framework (EF). ΠΠΎΠ·ΠΆΠ΅ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ MVC. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΠ°ΠΊΠ΅ΡΠ° NuGet EF, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ Π³ΠΎΡΠΎΠ²Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΡΠ΅, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΡΠΈ ΡΠ°Π³ΠΈ ΠΈ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° MVC ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ
Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° Contoso. ΠΠ°ΡΠ½ΠΈΡΠ΅ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ΅Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ:
ΠΡΡΡ Enrollment-Student
| Π‘ΡΡΠ½ΠΎΡΡΠΈ | Π‘Π²ΡΠ·Ρ |
|---|---|
| ΠΡΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ | ΠΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ |
| Π£ΡΠ°ΡΠΈΠΉΡΡ Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ | ΠΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ |
Π ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ Π²Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΈΡΠ΅ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ.
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
Π‘ΡΡΠ½ΠΎΡΡΡ Student
Π ΠΏΠ°ΠΏΠΊΠ΅ Models ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» ΠΊΠ»Π°ΡΡΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Student.cs, ΡΠ΅Π»ΠΊΠ½ΡΠ² ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠ°ΠΏΠΊΡ Π² ΠΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈ Π²ΡΠ±ΡΠ°Π² «ΠΠΎΠ±Π°Π²ΠΈΡΡ>ΠΊΠ»Π°ΡΡ«. ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ ID Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠΎΠ»Π±ΡΠ° ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Entity Framework ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ID ΠΈΠ»ΠΈ ΠΈΠΌΡ ID ΠΊΠ»Π°ΡΡΠ°, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ.
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Enrollments ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ. Π‘Π²ΠΎΠΉΡΡΠ²Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΡΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΡΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΡΡΠ½ΠΎΡΡΠΈ Student Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²ΡΠ΅ Enrollment ΡΡΡΠ½ΠΎΡΡΠΈ, Enrollments ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΡΠΎΠΉ Student ΡΡΡΠ½ΠΎΡΡΡΡ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½Π½Π°Ρ Student ΡΡΡΠΎΠΊΠ° Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π²Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Enrollment ΡΡΡΠΎΠΊΠΈ (ΡΡΡΠΎΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° ΡΡΠ°ΡΠ΅Π³ΠΎΡΡ Π² ΡΡΠΎΠ»Π±ΡΠ΅ StudentID Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ°), ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΡΡΠΎΠΉ Student ΡΡΡΠ½ΠΎΡΡΠΈ Enrollments Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΡΠΈ Π΄Π²Π΅ Enrollment ΡΡΡΠ½ΠΎΡΡΠΈ.
Π‘ΡΡΠ½ΠΎΡΡΡ Enrollment
Π ΠΏΠ°ΠΏΠΊΠ΅ Models ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» Enrollment.cs ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:
Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Grade ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ. ΠΠ½Π°ΠΊ Π²ΠΎΠΏΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ° Grade ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Grade Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL. ΠΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL, ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π½ΡΠ»Ρ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ NULL ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΡΠ΅Π½ΠΊΠ° Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΈΠ»ΠΈ Π΅ΡΠ΅ Π½Π΅ Π½Π°Π·Π½Π°ΡΠ΅Π½Π°.
Entity Framework ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΠ°ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ°, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, StudentID Π΄Π»Ρ Student ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Student ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΡΡΡΠ½ΠΎΡΡΠΈ ). ID Π‘Π²ΠΎΠΉΡΡΠ²Π° Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, CourseID ΡΠ°ΠΊ ΠΊΠ°ΠΊ Course ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ CourseID ).
Π‘ΡΡΠ½ΠΎΡΡΡ Course
Π ΠΏΠ°ΠΏΠΊΠ΅ Models ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π€Π°ΠΉΠ» Course.cs, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΊΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:
ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° DatabaseGeneratedAttribute Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ΅Π±Π½ΠΈΠΊΠΎΠ² ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΡΡΠΎΡ Π°ΡΡΠΈΠ±ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π²Π΅ΡΡΠΈ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ ΠΊΡΡΡΠ°, Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π΅Π³ΠΎ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ContosoUniversity, ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΠΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ «ΠΠΎΠ±Π°Π²ΠΈΡΡ» ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ «Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ«. ΠΠ°Π·ΠΎΠ²ΠΈΡΠ΅ Π½ΠΎΠ²ΡΡ ΠΏΠ°ΠΏΠΊΡ DAL (Π΄Π»Ρ ΡΡΠΎΠ²Π½Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ). Π ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» ΠΊΠ»Π°ΡΡΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ SchoolContext.cs ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:
Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡΠΎΠ² ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ DbSet Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ. Π ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Entity Framework Π½Π°Π±ΠΎΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π° ΡΡΡΠ½ΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΡΠΎΠΊΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΠ΅.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΡΡΠΈΡΡ DbSet ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΈ DbSet ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. Entity Framework Π±ΡΠ΄Π΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΈΡ Π½Π΅ΡΠ²Π½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Student ΡΡΡΠ½ΠΎΡΡΡ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° Enrollment ΡΡΡΠ½ΠΎΡΡΡ, Π° Enrollment ΡΡΡΠ½ΠΎΡΡΡ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° Course ΡΡΡΠ½ΠΎΡΡΡ.
Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΠΌΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ» Web.config ΠΏΠΎΠ·ΠΆΠ΅) ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ.
ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ°ΠΌΡ ΡΡΡΠΎΠΊΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΠΈΠΌΡ ΡΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ Web.config. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΡΠΌ. Π² ΡΡΡΠΎΠΊΠ°Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΡ .
ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΡΠΎΠΊΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ²Π½ΠΎ, Entity Framework ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΠΈΠΌΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠ»Π°ΡΡΠ°. ΠΠΌΡ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ SchoolContext ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΡΠΈΠ½Π³ΡΠ»ΡΡΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡ
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΡΠ΅ΡΡΠΎΠ²ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ
Entity Framework ΠΌΠΎΠΆΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ (ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ) Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ . ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ Seed ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Entity Framework Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ Π΅Π΅ ΡΠ΅ΡΡΠΎΠ²ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ (ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ). Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π²Ρ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅, ΡΡΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ΄Π°Π»Π΅Π½Π° ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π° ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Seed ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠΎ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ΅Π΄Π΅ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΅ΡΡΡΡ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΡ Π΅ΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ°Π»Π΅Π΅ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Code First Migrations Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡ Π΅ΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
Π ΠΏΠ°ΠΏΠΊΠ΅ DAL ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» ΠΊΠ»Π°ΡΡΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ SchoolInitializer.cs ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠ΅ΡΡΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ Π² Π½ΠΎΠ²ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΠ΅ΡΠΎΠ΄ Seed ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π° ΠΊΠΎΠ΄ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΡΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Π½ΠΎΠ²ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΈΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ DbSet ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . ΠΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ SaveChanges ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π·Π΄Π΅ΡΡ, Π½ΠΎ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π°ΠΉΡΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠΎΠ΄Π° Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
Π§ΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ Entity Framework ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ entityFramework Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠ°ΠΉΠ»Π΅ Web.config ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΎ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Entity Framework ΡΡΠ°Π²Π½ΠΈΠ²Π°Π»Π° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ (ΠΊΠ»Π°ΡΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Π²Π°ΡΠ΅ΠΉ SchoolContext ΡΡΡΠ½ΠΎΡΡΠΈ). ΠΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ°Π·Π½ΠΈΡΠ°, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΡΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΠΌ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ Π² ΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠΈ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° EF 6 Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ LocalDB
LocalDB β ΡΡΠΎ ΡΠΏΡΠΎΡΠ΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΠ΄ΡΠ° Π‘Π£ΠΠ SQL Server Express. ΠΠ΅Π³ΠΊΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ, Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. LocalDB Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ SQL Server Express, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ MDF-ΡΠ°ΠΉΠ»ΠΎΠ². Π€Π°ΠΉΠ»Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ LocalDB ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΏΠ°ΠΏΠΊΡ App_Data Π²Π΅Π±-ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² SQL Server Express ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ MDF-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΉ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ MDF-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ LocalDB. LocalDB ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Visual Studio.
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, SQL Server Express Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΠΈΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. LocalDB, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ΅Π΄Π΅ Ρ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ IIS.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π² ΡΠ°ΠΉΠ»Π΅Web.config Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π΅ Π·Π°Π΄Π°Π½Π°, Entity Framework ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡΠΎΠΊΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Code First to a New Database.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΈΡΠ΅ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎΡΠ΅ΡΡ Π·Π°ΠΏΡΠΎΡΠ° Π΄Π°Π½Π½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ°ΡΠ½ΠΈΡΠ΅ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°. ΠΠΎ ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° MVC.
Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠ°ΠΏΠΊΡ Controllers Π² ΠΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ «ΠΠΎΠ±Π°Π²ΠΈΡΡ» ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ «Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ«.
Π Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ «ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² » Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ MVC 5 Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Entity Framework ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠΎΠ±Π°Π²ΠΈΡΡ«.
Π Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ «ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ » ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅, Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠΎΠ±Π°Π²ΠΈΡΡ«.
ΠΠ»Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ: Student (ContosoUniversity.Models). (ΠΡΠ»ΠΈ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠ΅ΠΌΡΡ ΡΠΏΠΈΡΠΊΠ΅, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ±ΠΎΡΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΡ.)
ΠΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π΄Π°Π½Π½ΡΡ : SchoolContext (ContosoUniversity.DAL).
ΠΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°: StudentController (Π½Π΅ StudentsController).
ΠΡΡΠ°Π²ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ.
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Student\Index.cshtml ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ Π² ΡΠ°Π±Π»ΠΈΡΠ΅:
Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ, Π½Π°ΠΆΠΌΠΈΡΠ΅ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡ CTRL+F5. (ΠΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° «ΠΠ΅ ΡΠ΄Π°Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅Π½Π΅Π²ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅», Π·Π°ΠΊΡΠΎΠΉΡΠ΅ Π±ΡΠ°ΡΠ·Π΅Ρ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΡ.)
ΠΡΠΎΡΠΌΠΎΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΈΡΡ «Π£ΡΠ°ΡΠΈΠ΅ΡΡ» ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΏΡΡΠ°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , EF ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»Π°, ΡΡΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½Π° ΠΈ ΡΠΎΠ·Π΄Π°Π½Π°. ΠΠ°ΡΠ΅ΠΌ EF Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» ΠΌΠ΅ΡΠΎΠ΄ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΠ»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π² Visual Studio ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈΠ»ΠΈ SQL Server ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (SSOX). Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ².
Π ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Π΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΡΠ°Π·Π²Π΅ΡΠ½ΠΈΡΠ΅ ΡΠ·Π΅Π» «ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ» (ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠ½Π°ΡΠ°Π»Π° Π½Π°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ), ΡΠ°Π·Π²Π΅ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΡΠ΅Π±Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Π΄Π΅Π½ΠΈΡ (ContosoUniversity) ΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΠΈΡΠ΅ «Π’Π°Π±Π»ΠΈΡΡ «, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π² Π½ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
Π©Π΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ Student ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ «ΠΠΎΠΊΠ°Π·Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ «, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΡΡΠΎΠ»Π±ΡΡ ΠΈ ΡΡΡΠΎΠΊΠΈ, Π²ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠ°Π±Π»ΠΈΡΡ.
Π€Π°ΠΉΠ»Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ContosoUniversity1.mdf ΠΈ LDF Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ %USERPROFILE%.
Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ
ΠΠ±ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ, ΡΡΠΎΠ±Ρ ΠΠ»Π°ΡΡΠΎΡΠΌΠ° Entity Framework ΠΌΠΎΠ³Π»Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ»Π½ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π° ΠΈΠ·-Π·Π° ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°Π΅Ρ Entity Framework. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΡΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΎΡΠΌΠ΅ΡΠ΅Π½Ρ ΠΈΠ»ΠΈ Π±ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π±Π΅Π· Π²Π°ΡΠ΅Π³ΠΎ ΠΎΡΠΎΠ·Π½Π°Π½ΠΈΡ:
ΠΡ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π° ΡΠ°Π±Π»ΠΈΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠΈΡΠ»Π΅, ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΠΊΠ°ΠΊ ΡΠ²Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΠ°ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ°.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ EF 6 ΡΠΌ. Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ°ΡΡΡΡ :
Code First to an Existing Database
This step-by-step walkthrough provides an introduction to Code First development targeting an existing database. Code First allows you to define your model using C# or VB.Net classes. Optionally additional configuration can be performed using attributes on your classes and properties or by using a fluent API.
Pre-Requisites
You will need to have Visual Studio 2012 or Visual Studio 2013 installed to complete this walkthrough.
You will also need version 6.1 (or later) of the Entity Framework Tools for Visual Studio installed. See Get Entity Framework for information on installing the latest version of the Entity Framework Tools.
1. Create an Existing Database
Typically when you are targeting an existing database it will already be created, but for this walkthrough we need to create a database to access.
Let’s go ahead and generate the database.
Open Visual Studio
If you havenΠ²Π™t connected to a database from Server Explorer before youΠ²Π™ll need to select Microsoft SQL Server as the data source
Connect to your LocalDB instance, and enter Blogging as the database name
Select OK and you will be asked if you want to create a new database, select Yes
The new database will now appear in Server Explorer, right-click on it and select New Query
Copy the following SQL into the new query, then right-click on the query and select Execute
2. Create the Application
To keep things simple we will build a basic console application that uses Code First to do the data access:
3. Reverse Engineer Model
We will use the Entity Framework Tools for Visual Studio to help us generate some initial code to map to the database. These tools are just generating code that you could also type by hand if you prefer.
Select Data from the left menu and then ADO.NET Entity Data Model
Enter BloggingContext as the name and click OK
This launches the Entity Data Model Wizard
Select Code First from Database and click Next
Select the connection to the database you created in the first section and click Next
Click the checkbox next to Tables to import all tables and click Finish
Once the reverse engineer process completes a number of items will have been added to the project, let’s take a look at what’s been added.
Configuration file
An App.config file has been added to the project, this file contains the connection string to the existing database.
YouΠ²Π™ll notice some other settings in the configuration file too, these are default EF settings that tell Code First where to create databases. Since we are mapping to an existing database these setting will be ignored in our application.
Derived Context
A BloggingContext class has been added to the project. The context represents a session with the database, allowing us to query and save data. The context exposes a DbSet for each type in our model. YouΠ²Π™ll also notice that the default constructor calls a base constructor using the name= syntax. This tells Code First that the connection string to use for this context should be loaded from the configuration file.
You should always use the name= syntax when you are using a connection string in the config file. This ensures that if the connection string is not present then Entity Framework will throw rather than creating a new database by convention.
Model classes
4. Reading & Writing Data
Now that we have a model itΠ²Π™s time to use it to access some data. Implement the Main method in Program.cs as shown below. This code creates a new instance of our context and then uses it to insert a new Blog. Then it uses a LINQ query to retrieve all Blogs from the database ordered alphabetically by Title.
You can now run the application and test it.
What if My Database Changes?
The Code First to Database wizard is designed to generate a starting point set of classes that you can then tweak and modify. If your database schema changes you can either manually edit the classes or perform another reverse engineer to overwrite the classes.
Using Code First Migrations to an Existing Database
If you want to use Code First Migrations with an existing database, see Code First Migrations to an existing database.
Summary
In this walkthrough we looked at Code First development using an existing database. We used the Entity Framework Tools for Visual Studio to reverse engineer a set of classes that mapped to the database and could be used to store and retrieve data.
Entity Framework Core Code First
If you have used Entity Framework in the past, you will probably have heard about the Code First approach.
To start using Entity Framework, use the following steps;
The first step is to create a new project and then add all the required NuGet Packages for EF Core. Once all the NuGet packages are installed, add your conceptual model.
It is a very simple model which contains only two classes, Order and OrderDetail has a one-to-many relationship. The next step is to add a new context class and make sure to inherit from the DbContext class
In EF Core, the DbContext has a virtual method called onConfiguring which will get called internally by EF Core, and it will also pass in an optionsBuilder instance, and you can use that optionsBuilder to configure options for the DbContext.
The optionsBuilder has UseSqlServer method; it expects a connection string as a parameter. Once you have a model, you can use migrations to create a database.
Now to create a database using migrations from your model, install the following packages;
Once these packages are installed, run the following command in Package Manager Console.
This command scaffold a migration to create the initial set of tables for your model. When it is executed successfully, then run the following command.
Now you will see a database in Object Explorer with two tables.
ΠΠ°ΠΌΠ΅ΡΠΊΠΈ ΠΊ Π΄Π°Π½Π½ΡΠΌ Code First
Π’ΠΎΠ»ΡΠΊΠΎ EF4.1 β ΡΡΠ½ΠΊΡΠΈΠΈ, API ΠΈ Ρ. Π΄., ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ Π½Π° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅, Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Entity Framework 4.1. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ»ΠΈ Π²ΡΠ΅ ΡΡΠΈ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π½Π° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈΠ· ΡΡΠ°ΡΡΠΈ, ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ ΠΠΆΡΠ»ΠΈ ΠΠ΅ΡΠΌΠ°Π½ ( ).
Entity Framework Code First ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΡΠΎΡΡΡ EF ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. Code First ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ «ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ». Code First ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΠΊΠ»Π°ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌ Entity Framework, ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΊΠ»Π°ΡΡΡ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΡΠΈΠΌ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π² ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ EF Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ.
Code First ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ Π² ΠΊΠ»Π°ΡΡΡ. ΠΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠΎΡΡΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ DataAnnotations, Π° Π²ΡΠΎΡΠΎΠΉ β API Fluent Code First, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ Π² ΠΊΠΎΠ΄Π΅.
ΠΠΎΠ΄Π΅Π»Ρ
Π― ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ Code First DataAnnotations Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΠ°ΡΠΎΠΉ ΠΊΠ»Π°ΡΡΠΎΠ²: Blog ΠΈ Post.
ΠΠΎ ΠΌΠ΅ΡΠ΅ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΡ Blog ΠΈ Post ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΎ ΠΊΠΎΠ΄Π΅ ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ EF. ΠΠ΄Π½Π°ΠΊΠΎ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ EF ΠΎ ΠΊΠ»Π°ΡΡΠ°Ρ ΠΈ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ½ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ.
Entity Framework ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ. ΠΠ΄Π½ΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ Code First β ΡΡΠΎ Π½Π΅ΡΠ²Π½ΡΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°; Code First Π±ΡΠ΄Π΅Ρ ΠΈΡΠΊΠ°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ «Id» ΠΈΠ»ΠΈ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ «BlogId». ΠΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
ΠΠ»Π°ΡΡΡ Blog ΠΈ Post ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΡΠΎΠΌΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ. Π§ΡΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ? Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π±Π»ΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ ΠΈΠΌΡ PrimaryTrackingKey ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ foo? ΠΡΠ»ΠΈ ΠΊΠΎΠ΄ ΡΠ½Π°ΡΠ°Π»Π° Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΡΠΎΠΌΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΠΎΠ½ΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·-Π·Π° ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Entity Framework, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΠ»ΡΡΠ°. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΊ ΠΊΠ»ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ EntityKey.
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠ°Π±Π»ΠΈΡΠ° Π±Π»ΠΎΠ³Π° Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΡΠΎΠ»Π±Π΅Ρ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ PrimaryTrackingKey, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Identity ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
Π‘ΠΎΡΡΠ°Π²Π½ΡΠ΅ ΠΊΠ»ΡΡΠΈ
Entity Framework ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΠΊΠ»ΡΡΠΈ β ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ, ΡΠΎΡΡΠΎΡΡΠΈΠ΅ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ»Π°ΡΡ Passport, ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠ΅ΠΌ PassportNumber ΠΈ IssuingCountry.
ΠΠΎΠΏΡΡΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠ»Π°ΡΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ EF ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ : InvalidOperationException
ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π΄Π»Ρ ΡΠΈΠΏΠ° Passport. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ ColumnAttribute ΠΈΠ»ΠΈ HasKey, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΡΡΠ°Π²Π½ΡΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ.
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΠΊΠ»ΡΡΠΈ, Entity Framework ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ²ΠΎΠΉΡΡΠ² ΠΊΠ»ΡΡΠ°. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΊ ΡΡΠΎΠ»Π±ΡΡ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ.
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ (Π° Π½Π΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ°), ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 100 ΠΈ 200 Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ Π²ΠΌΠ΅ΡΡΠΎ 1 ΠΈ 2.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΡΡΠ½ΠΎΡΡΠΈ Ρ ΡΠΎΡΡΠ°Π²Π½ΡΠΌΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΡΠΎΠ»Π±ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°.
ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ
ΠΠ°ΠΌΠ΅ΡΠΊΠ° Required ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ EF, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ.
ΠΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Ρ Title Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ EF (ΠΈ MVC), ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ MVC Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π΄Π°ΠΆΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠΌΠ΅Π½ ΡΠ²ΠΎΠΉΡΡΠ² ΠΈ Π·Π°ΠΌΠ΅ΡΠΎΠΊ.
ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΠ΄Π΅Π»Π°Π² ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ NULL. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΠ»Π΅ title ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Π½Π° «Π½Π΅ null».
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΎΠ»Π±Π΅Ρ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ NULL, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ TPH Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅. ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΡΠΈΠΏ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΡΠΎΠ»Π±Π΅Ρ Π½Π΅Π»ΡΠ·Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ NULL, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ Π²ΡΠ΅ ΡΠΈΠΏΡ Π² ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ.
MaxLength ΠΈ MinLength
ΠΠΎΡ BlogName Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ ΠΊ Π΄Π»ΠΈΠ½Π΅. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡΡ.
ΠΠ°ΠΌΠ΅ΡΠΊΠ° MaxLength ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π·Π°Π΄Π°Π² Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄Π»ΠΈΠ½Ρ 10.
ΠΠ°ΠΌΠ΅ΡΠΊΠ° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° MVC ΠΈ Π·Π°ΠΌΠ΅ΡΠΊΠ° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° EF 4.1 Π±ΡΠ΄ΡΡ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, ΠΎΠΏΡΡΡ ΠΆΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅: «ΠΠΎΠ»Π΅ BloggerName Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ ΠΈΠ»ΠΈ ΡΠΈΠΏΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π° Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ «10». ΠΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅. ΠΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ ErrorMessage.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ErrorMessage Π² ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅ΡΠΊΠ΅.
NotMapped
ΠΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΠ²Π»ΡΡΡΠ΅Π΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . ΠΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°ΠΊ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΠ»ΠΎΠ³Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠΎΠ΄ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠ»Π΅ΠΉ Title ΠΈ BloggerName. ΠΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Ρ ΡΠ°Π½ΠΈΡΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ Π»ΡΠ±ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΌΠ΅ΡΠΊΠΈ NotMapped, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° BlogCode.
ComplexType
ΠΡΠΎ Π½Π΅ ΡΠ΅Π΄ΠΊΠΎΡΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΡΡΠ½ΠΎΡΡΠΈ Π΄ΠΎΠΌΠ΅Π½Π° Π² Π½Π°Π±ΠΎΡΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΠ»Π½ΡΡ ΡΡΡΠ½ΠΎΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»Π°ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ BlogDetails Π² ΠΌΠΎΠ΄Π΅Π»Ρ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ BlogDetails ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΠ»ΡΡΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΈΠΏΠ°. Π ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌ Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ BlogDetails Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Entity Framework ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΊΠ°ΠΊ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠΈΠΏΡ. Π‘Π»ΠΎΠΆΠ½ΡΠ΅ ΡΠΈΠΏΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² Blog ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ BlogDetails ΡΡΠΎΠ³ΠΎ Π±Π»ΠΎΠ³Π°.
Π Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π±Π»ΠΎΠ³Π°, Blog Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π² Π΅Π³ΠΎ BlogDetail ΡΠ²ΠΎΠΉΡΡΠ²Π΅. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠΌΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° BlogDetail.
ConcurrencyCheck
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ConcurrencyCheck ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π΅Π³ΠΎ Π² BloggerName ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ.
TimeStamp
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎΠ»Ρ rowversion ΠΈΠ»ΠΈ timestamp Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°. ΠΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ConcurrencyCheck ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ TimeStamp Π·Π°ΠΌΠ΅ΡΠΊΡ, Π΅ΡΠ»ΠΈ ΡΠΈΠΏ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ Π±Π°ΠΉΡΠΎΠ². Π‘Π½Π°ΡΠ°Π»Π° ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Timestamp ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ConcurrencyCheck ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΏΠΎΠ»Π΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠΎΠ΄, Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ NULL. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΠΊΠ»Π°ΡΡ Blog:
Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΊΠΎΠ΄Π° ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΡΠΎΠ»Π±Π΅Ρ ΠΌΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΡ NULL, Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
Π’Π°Π±Π»ΠΈΡΠ° ΠΈ ΡΡΠΎΠ»Π±Π΅Ρ
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅ΡΠ΅ Code First ΡΠΎΠ·Π΄Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡ ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° ΡΠΎΠ·Π΄Π°Π΅Ρ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Code First Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ . ΠΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°ΠΊ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡΠ² Π² Π²Π°ΡΠ΅ΠΌ Π΄ΠΎΠΌΠ΅Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌ ΡΠ°Π±Π»ΠΈΡ ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ² Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
ΠΠ΅ ΠΏΡΡΠ°ΠΉΡΠ΅ Π°ΡΡΠΈΠ±ΡΡ Column TypeName Ρ dataType DataAnnotation. DataType β ΡΡΠΎ Π·Π°ΠΌΠ΅ΡΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌΠ°Ρ code First.
DatabaseGenerated
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π² ΡΡΠΎΠ»Π±ΡΠ°Ρ Π±Π°ΠΉΡΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΅Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ ΡΠ½Π°ΡΠ°Π»Π° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΠΌΡΠ»Ρ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠΎΠ»Π±ΡΠ°.
ΠΠ½Π΄Π΅ΠΊΡ
Ef6.1 Onwards Only β Index Π°ΡΡΠΈΠ±ΡΡ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² Entity Framework 6.1. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ, ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ.
ΠΠ½Π΄Π΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΠΎΠ»Π±ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ IndexAttribute. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ²ΠΎΠΉΡΡΠ² ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ EF ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² CreateIndex ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Code First Migrations.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π΄Π»Ρ Rating ΡΡΠΎΠ»Π±ΡΠ° Posts ΡΠ°Π±Π»ΠΈΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ IsUnique ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ User ΠΈΠΌΠ΅Π½ΠΈ Π²Ρ ΠΎΠ΄Π°.
ΠΠ½Π΄Π΅ΠΊΡΡ Multiple-Column
ΠΠ½Π΄Π΅ΠΊΡΡ, ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ², Π·Π°Π΄Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π·Π°ΠΌΠ΅ΡΠΊΠ°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΡΠΎΠ»Π±ΡΠ°ΠΌΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄Π»Ρ ΡΡΠΎΠ»Π±ΡΠΎΠ² Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ Rating Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΡΠΎΠ»Π±ΡΠ°ΠΌΠΈ ΠΈ BlogId Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ IX_BlogIdAndRating. BlogId β ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠΎΠ»Π±Π΅Ρ Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ΅ ΠΈ Rating Π²ΡΠΎΡΠΎΠΉ.
ΠΡΡΠΈΠ±ΡΡΡ ΡΠ²ΡΠ·ΠΈ: InverseProperty ΠΈ ForeignKey
ΠΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΡΠ²ΡΠ·Π΅ΠΉ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ Code First Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΌΠ΅ΡΠΎΠΊ ΠΊ Π΄Π°Π½Π½ΡΠΌ. ΠΠ±ΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠ²ΡΠ·ΡΡ Π² EF ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΡΠ·Π΅ΠΉ, ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ «Π‘Π²ΠΎΠΉΡΡΠ²Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΡΠ²ΡΠ·Π΅ΠΉ&».*
ΠΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠ΄Ρ Π±ΡΠ΄Π΅Ρ Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΡΠ²ΡΠ·ΡΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ½Π° Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΠΏΠΎΠΌΠΎΡΠΈ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ InverseProperty ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ²ΡΠ·Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ.
Post Π ΠΊΠ»Π°ΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΡΠ΅ΠΌ, ΠΊΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π» Π·Π°ΠΏΠΈΡΡ Π±Π»ΠΎΠ³Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊΡΠΎ Π΅Π³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π». ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π΄Π²Π° Π½ΠΎΠ²ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° Post.
Π‘Π½Π°ΡΠ°Π»Π° ΠΊΠΎΠ΄ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² Π΄Π²ΡΡ ΠΊΠ»Π°ΡΡΠ°Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. Π’Π°Π±Π»ΠΈΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Posts Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ CreatedBy ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΎΠ΄ΠΈΠ½ Π΄Π»Ρ UpdatedBy ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π½ΠΎ ΠΊΠΎΠ΄ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΡΡΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ°: Person_Id, Person_Id1, CreatedBy_Id ΠΈ UpdatedBy_Id.
Π§ΡΠΎΠ±Ρ ΡΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π°ΠΌΠ΅ΡΠΊΡ InverseProperty Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ².
Π‘Π²ΠΎΠ΄ΠΊΠ°
DataAnnotations Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΊΠ»Π°ΡΡΠ°Ρ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ»ΡΡΡΠΈΡΡ ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ΄ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ΄Π΅Π»Π°Π΅Ρ ΠΎ ΠΊΠ»Π°ΡΡΠ°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΅Π³ΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ DataAnnotations ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΡΡ Π΅ΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ .
Π₯ΠΎΡΡ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠ΅Π½Ρ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ, ΠΈΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ DataAnnotations ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅ΡΡΠΈ Π² ΠΊΠΎΠ΄ Π² ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ. Π§ΡΠΎΠ±Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ³ΡΠ°Π½ΠΈΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ API Fluent Code First.
Code First Data Annotations
The content on this page is adapted from an article originally written by Julie Lerman ( ).
Entity Framework Code First allows you to use your own domain classes to represent the model that EF relies on to perform querying, change tracking, and updating functions. Code First leverages a programming pattern referred to as ‘convention over configuration.’ Code First will assume that your classes follow the conventions of Entity Framework, and in that case, will automatically work out how to perform its job. However, if your classes do not follow those conventions, you have the ability to add configurations to your classes to provide EF with the requisite information.
Code First gives you two ways to add these configurations to your classes. One is using simple attributes called DataAnnotations, and the second is using Code FirstΠ²Π™s Fluent API, which provides you with a way to describe configurations imperatively, in code.
The model
IΠ²Π™ll demonstrate Code First DataAnnotations with a simple pair of classes: Blog and Post.
As they are, the Blog and Post classes conveniently follow code first convention and require no tweaks to enable EF compatability. However, you can also use the annotations to provide more information to EF about the classes and the database to which they map.
Entity Framework relies on every entity having a key value that is used for entity tracking. One convention of Code First is implicit key properties; Code First will look for a property named Π²ΠΡIdΠ²ΠΡ, or a combination of class name and Π²ΠΡIdΠ²ΠΡ, such as Π²ΠΡBlogIdΠ²ΠΡ. This property will map to a primary key column in the database.
The Blog and Post classes both follow this convention. What if they didnΠ²Π™t? What if Blog used the name PrimaryTrackingKey instead, or even foo? If code first does not find a property that matches this convention it will throw an exception because of Entity FrameworkΠ²Π™s requirement that you must have a key property. You can use the key annotation to specify which property is to be used as the EntityKey.
If you are using code firstΠ²Π™s database generation feature, the Blog table will have a primary key column named PrimaryTrackingKey, which is also defined as Identity by default.
Composite keys
Attempting to use the above class in your EF model would result in an InvalidOperationException :
Unable to determine composite primary key ordering for type ‘Passport’. Use the ColumnAttribute or the HasKey method to specify an order for composite primary keys.
In order to use composite keys, Entity Framework requires you to define an order for the key properties. You can do this by using the Column annotation to specify an order.
The order value is relative (rather than index based) so any values can be used. For example, 100 and 200 would be acceptable in place of 1 and 2.
If you have entities with composite foreign keys, then you must specify the same column ordering that you used for the corresponding primary key properties.
Only the relative ordering within the foreign key properties needs to be the same, the exact values assigned to Order do not need to match. For example, in the following class, 3 and 4 could be used in place of 1 and 2.
Required
The Required annotation tells EF that a particular property is required.
Adding Required to the Title property will force EF (and MVC) to ensure that the property has data in it.
With no additional code or markup changes in the application, an MVC application will perform client side validation, even dynamically building a message using the property and annotation names.
The Required attribute will also affect the generated database by making the mapped property non-nullable. Notice that the Title field has changed to Π²ΠΡnot nullΠ²ΠΡ.
In some cases it may not be possible for the column in the database to be non-nullable even though the property is required. For example, when using a TPH inheritance strategy data for multiple types is stored in a single table. If a derived type includes a required property the column cannot be made non-nullable since not all types in the hierarchy will have this property.
MaxLength and MinLength
Here is the BloggerName with length requirements. The example also demonstrates how to combine attributes.
The MaxLength annotation will impact the database by setting the propertyΠ²Π™s length to 10.
MVC client-side annotation and EF 4.1 server-side annotation will both honor this validation, again dynamically building an error message: Π²ΠΡThe field BloggerName must be a string or array type with a maximum length of ’10’.Π²ΠΡ That message is a little long. Many annotations let you specify an error message with the ErrorMessage attribute.
You can also specify ErrorMessage in the Required annotation.
NotMapped
Code first convention dictates that every property that is of a supported data type is represented in the database. But this isnΠ²Π™t always the case in your applications. For example you might have a property in the Blog class that creates a code based on the Title and BloggerName fields. That property can be created dynamically and does not need to be stored. You can mark any properties that do not map to the database with the NotMapped annotation such as this BlogCode property.
ComplexType
ItΠ²Π™s not uncommon to describe your domain entities across a set of classes and then layer those classes to describe a complete entity. For example, you may add a class called BlogDetails to your model.
Notice that BlogDetails does not have any type of key property. In domain driven design, BlogDetails is referred to as a value object. Entity Framework refers to value objects as complex types.Π Complex types cannot be tracked on their own.
Now you can add a property in the Blog class to represent the BlogDetails for that blog.
In the database, the Blog table will contain all of the properties of the blog including the properties contained in its BlogDetail property. By default, each one is preceded with the name of the complex type, «BlogDetail».
ConcurrencyCheck
LetΠ²Π™s see how ConcurrencyCheck works by adding it to the BloggerName property.
If someone has changed the blogger name for that blog in the meantime, this update will fail and youΠ²Π™ll get a DbUpdateConcurrencyException that you’ll need to handle.
TimeStamp
It’s more common to use rowversion or timestamp fields for concurrency checking. But rather than using the ConcurrencyCheck annotation, you can use the more specific TimeStamp annotation as long as the type of the property is byte array. Code first will treat Timestamp properties the same as ConcurrencyCheck properties, but it will also ensure that the database field that code first generates is non-nullable. You can only have one timestamp property in a given class.
Adding the following property to the Blog class:
results in code first creating a non-nullable timestamp column in the database table.
Table and Column
If you are letting Code First create the database, you may want to change the name of the tables and columns it is creating. You can also use Code First with an existing database. But it’s not always the case that the names of the classes and properties in your domain match the names of the tables and columns in your database.
The Column annotation is a more adept in specifying the attributes of a mapped column. You can stipulate a name, data type or even the order in which a column appears in the table. Here is an example of the Column attribute.
DonΠ²Π™t confuse ColumnΠ²Π™s TypeName attribute with the DataType DataAnnotation. DataType is an annotation used for the UI and is ignored by Code First.
DatabaseGenerated
You can use database generated on byte or timestamp columns when code first is generating the database, otherwise you should only use this when pointing to existing databases because code first won’t be able to determine the formula for the computed column.
Index
You can create an index on one or more columns using the IndexAttribute. Adding the attribute to one or more properties will cause EF to create the corresponding index in the database when it creates the database, or scaffold the corresponding CreateIndex calls if you are using Code First Migrations.
For example, the following code will result in an index being created on the Rating column of the Posts table in the database.
By default, the index will be named IX_
By default, indexes are non-unique, but you can use the IsUnique named parameter to specify that an index should be unique. The following example introduces a unique index on a User ‘s login name.
Multiple-Column Indexes
Indexes that span multiple columns are specified by using the same name in multiple Index annotations for a given table. When you create multi-column indexes, you need to specify an order for the columns in the index. For example, the following code creates a multi-column index on Rating and BlogId called IX_BlogIdAndRating. BlogId is the first column in the index and Rating is the second.
Relationship Attributes: InverseProperty and ForeignKey
This page provides information about setting up relationships in your Code First model using Data Annotations. For general information about relationships in EF and how to access and manipulate data using relationships, see Relationships & Navigation Properties.*
Code first convention will take care of the most common relationships in your model, but there are some cases where it needs help.
When generating the database, code first sees the BlogId property in the Post class and recognizes it, by the convention that it matches a class name plus Id, as a foreign key to the Blog class. But there is no BlogId property in the blog class. The solution for this is to create a navigation property in the Post and use the ForeignKey DataAnnotation to help code first understand how to build the relationship between the two classes (using the Post.BlogId property) as well as how to specify constraints in the database.
The InverseProperty is used when you have multiple relationships between classes.
In the Post class, you may want to keep track of who wrote a blog post as well as who edited it. Here are two new navigation properties for the Post class.
Code first is not able to match up the properties in the two classes on its own. The database table for Posts should have one foreign key for the CreatedBy person and one for the UpdatedBy person but code first will create four foreign key properties: Person_Id, Person_Id1, CreatedBy_Id and UpdatedBy_Id.
To fix these problems, you can use the InverseProperty annotation to specify the alignment of the properties.
Summary
DataAnnotations not only let you describe client and server side validation in your code first classes, but they also allow you to enhance and even correct the assumptions that code first will make about your classes based on its conventions. With DataAnnotations you can not only drive database schema generation, but you can also map your code first classes to a pre-existing database.
Π¨Π°Π±Π»ΠΎΠ½ Code First Π² ADO.NET Entity Framework 4.1
Π ΠΎΡΡΠ½ ΠΠΈΠ»Π»Π΅Ρ
ΠΡΠΎΠ΄ΡΠΊΡΡ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ:
Entity Framework 4.1
Π ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ:
Entity Framework 4.1 Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ (msdn.microsoft.com/data/ee712906) ΠΊΠ°ΠΊ NuGet-ΠΏΠ°ΠΊΠ΅Ρ EntityFramework, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² ASP.NET MVC 3.01.
Π Entity Framework 4.1 ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΄Π²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ: DbContext API ΠΈ Code First. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ Code First, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
DbContext API β ΡΡΠΎ ΡΠΏΡΠΎΡΠ΅Π½Π½Π°Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠΏΠ° ObjectContext ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π²Π²Π΅Π΄Π΅Π½Ρ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π²ΡΠΏΡΡΠΊΠ°Ρ Entity Framework. DbContext API ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ Π·Π°Π΄Π°Ρ ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π° ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅, Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΠ°Ρ β Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΡΠΈ ΡΠ³Π»ΡΠ±Π»Π΅Π½ΠΈΠΈ Π² ΡΡΠΎΡ API.
Code First β Π½ΠΎΠ²ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ Entity Framework ΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ Database First ΠΈ Model First. Code First ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ CLR-ΠΊΠ»Π°ΡΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡ Π΅ΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΠΊΡΡΠΈΠΉ API.
ΠΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ Code First
Code First ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΆΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ ΡΡΠ°Π½Ρ Π²Π΄Π°Π²Π°ΡΡΡΡ Π² Π΄Π΅ΡΠ°Π»ΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΡΠ°ΡΡ Ρ Π½ΠΈΠΌ ΡΠ°Π±ΠΎΡΡ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ ΠΎΡΠ½ΠΎΠ²Π°ΠΌΠΈ, ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Β«Code First WalkthroughΒ» (bit.ly/evXlOc). ΠΠ° ΡΠΈΡ. 1 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ»Π½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠΈΠΉ Π±ΡΡΡΡΠΎ Π½Π°ΡΠ°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°Π±Π»ΠΎΠ½Π° Code First.
Π ΠΈΡ. 1. ΠΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ Code First
ΠΡΠΎΡΡΠΎΡΡ ΡΠ°Π΄ΠΈ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π» ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Code First Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π° ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ BlogContext Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΡΠΎΡΠ° Π΄Π°Π½Π½ΡΡ . ΠΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΡΡΠ°ΡΡΠΈ Π² ΡΠ°Π²Π½ΠΎΠΉ ΠΌΠ΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊ ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°ΡΠΌ, Π³Π΄Π΅ Code First ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ . ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅ Π²Π½Π΅ΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΌΠΎΠ΄Π΅Π»Ρ.
Π‘ΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ API
Code First Π½Π°ΡΠΈΠ½Π°Π΅Ρ Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π²Π°ΡΠΈΡ CLR-ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Β«ΠΊΠΎΠ½ΡΡΡΠΎΠ²Β» Π²Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΡΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ Π²Π΅ΡΠ΅ΠΉ Π²ΡΠΎΠ΄Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ΄ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ (ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ) ΡΠΎ, ΡΡΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ (Data Annotations) ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ API (fluent API). Π ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ Π·Π°Π΄Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ API ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠ΅ΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ»ΡΡΠ°Π΅Π². Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Ρ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΡΡΡ Π½Π° ΡΠ°Π·Π΄Π΅Π»Π°Ρ Β«ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡΒ» (mapping) ΡΡΠΎΠ³ΠΎ API. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎ ΡΡ Π΅ΠΌΠΎΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡ Π΅ΠΌΡ. Π’Π΅ΠΊΡΡΠΈΠΉ API ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΈΠΏ DbModelBuilder, ΠΈ ΠΊ Π½Π΅ΠΌΡ ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° OnModelCreating ΠΎΠ±ΡΠ΅ΠΊΡΠ° DbContext.
| Π Entity Framework 4.1 ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΄Π²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ: DbContext API ΠΈ Code First. |
Π Π°ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠΈΠΏΠ° ΡΡΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Ρ ΠΎΡΡ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠΎΡΠΎΡΠ½ΠΈΠΌΠΊΠΈ Π΄Π»Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅. ΠΡΠΈ ΡΠ°ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠΈ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Map Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ²ΠΎΠΉΡΡΠ² Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ. ΠΠ° ΡΠΈΡ. 2 Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Photo Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ PostPhotos, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° β Ρ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ Posts. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Ρ Π½Π΅ Π²ΠΊΠ»ΡΡΠΈΠ» ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠ»ΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠ²ΠΎΠΉΡΡΠ². ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠ»ΡΡ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅; Ρ ΠΌΠΎΠ³ Π±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ Code First Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ Π·Π° ΠΌΠ΅Π½Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
Π ΠΈΡ. 2. Π Π°ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Table-per-Hierarchy (TPH) Π ΡΠ»ΡΡΠ°Π΅ TPH Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π΅ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ΠΈΡ (discriminator) Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΈΠΏΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΠ΅ ΡΠ²ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Code First Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ TPH ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠΎΠ»Π΅ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ β Discriminator, ΠΈ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ CLR-ΡΠΈΠΏΠ°.
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², Π½ΠΎ Π·Π½Π°Ρ, ΡΡΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ RssEnabledBlog ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ Π½Π°Π»ΠΈΡΠΈΡ Ρ Π½ΠΈΡ RSS-ΠΊΠ°Π½Π°Π»Π°. Π― ΠΌΠΎΠ³Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ Entity Framework ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»Ρ, Π³Π΄Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ Blog.RssFeed, Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ². ΠΡΠ»ΠΈ Π² ΠΏΠΎΠ»Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΎΡ null, Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ RssEnabledBlog:
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Table-per-Concrete Type (TPC) Π ΡΠ»ΡΡΠ°Π΅ TPC Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌΡ ΠΊΠ»ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ TPT, Π½ΠΎ ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² MapInheritedProperties. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Code First Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π²ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Ρ Π½ΠΎΠ²ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°:
ΠΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, Code First Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΏΠΎΠ»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (identity columns). ΠΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ TPC Ρ Π²Π°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ Π²ΡΠ΅ Π±Π»ΠΎΠ³ΠΈ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠ»ΡΡΠΈ. ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ Code First ΠΎΡΠΊΠ»ΡΡΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ TPC. ΠΡΠ»ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ»Π° Π½Π°ΡΡΡΠΎΠ΅Π½Π° Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠ°Π·Π΄Π΅Π» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ API.
ΠΠΈΠ±ΡΠΈΠ΄Π½ΡΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π²Π°ΡΠ° ΡΡ Π΅ΠΌΠ° Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ . Π₯ΠΎΡΠΎΡΠ°Ρ Π½ΠΎΠ²ΠΎΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ API ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠ° ΡΠΈΡ. 3 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ, ΠΊΠ°ΠΊ ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ TPT. ΠΠ°Π½Π½ΡΠ΅, ΠΎΠ±ΡΠΈΠ΅ Π΄Π»Ρ Π±Π»ΠΎΠ³ΠΎΠ², ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ Blogs ΠΈ BlogAbstracts, Π° Π΄Π°Π½Π½ΡΠ΅, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ Π±Π»ΠΎΠ³ΠΎΠ² Ρ RSS-ΠΊΠ°Π½Π°Π»ΠΎΠΌ, Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ RssBlogs.
Π ΠΈΡ. 3. ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠ°ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ TPT
API Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
Π Π°ΡΡΠΌΠΎΡΡΠ΅Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ. (ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ, ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΡΠΈΡΠ°ΠΉΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Β«Code First WalkthroughΒ», ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π».)
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΆΡΡΠ½Π°Π»Π°, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΡΡΠ½ΠΎΡΡΠΈ. DbContext ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄ Entry. Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° Π½Π° ΡΠΈΡ. 4 Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Blog ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ²ΠΎΠΉΡΡΠ², Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°.
Π ΠΈΡ. 4. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΡΡΠ½ΠΎΡΡΠΈ
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Ρ ΡΠΈΡ. 4 Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ:
BlogId
Original Value: 1
Current Value: 1
Name
Original Value: blogs.msdn.com/data
Current Value: ADO.NET Team Blog
Abstract
Original Value:
Current Value:
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ DbContext ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄ ChangeTracker.Entries. ΠΠ½ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² Π΄Π²ΡΡ Π²Π΅ΡΡΠΈΡΡ : ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ (Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°) ΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠΉ (Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ). ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΈΠΏΠΎΠΌ ΡΡΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠΎΠ΄ Π½Π° ΡΠΈΡ. 5 Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΡ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±Π»ΠΎΠ³ΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΡ, ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±Π»ΠΎΠ³Π°.
Π ΠΈΡ. 5. ΠΠΎΡΡΡΠΏ ΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠ½ΠΎΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ DbContext
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Ρ ΡΠΈΡ. 5 Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ:
BlogId: 1
State: Modified
BlogId: 2
State: Unchanged
ΠΠ°ΠΏΡΠΎΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ LINQ-Π·Π°ΠΏΡΠΎΡ ΠΊ DbSet, Π·Π°ΠΏΡΠΎΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²Ρ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, Π½ΠΎ, Π΅ΡΠ»ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΈΠΊΠ»Π° ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Π·Π°ΠΏΡΠΎΡΠΈΠ² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠΎΠ΄ Π½Π° ΡΠΈΡ. 6 Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π² ΠΏΠ°ΠΌΡΡΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±Π»ΠΎΠ³ΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄Π²Π° LINQ-Π·Π°ΠΏΡΠΎΡΠ°, Π½Π΅ ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
Π ΠΈΡ. 6. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ LINQ-Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ Π΄Π°Π½Π½ΡΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Ρ ΡΠΈΡ. 6 Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ:
All Blogs:
— blogs.msdn.com/data
— romiller.com
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΠ°ΠΊ Π·Π°ΠΏΡΠΎΡ DbContext ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π°ΠΏΡΠΎΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΡΡΠ½ΠΎΡΡΠΈ. Π’Π΅ΠΌ ΡΠ°ΠΌΡΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΏΠ°ΠΌΡΡΡ, ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π΅Π½ΡΠΆΠ½ΡΡ Π΄Π°Π½Π½ΡΡ .
| Π Π°ΡΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠΈΠΏΠ° ΡΡΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌ. |
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π±Π»ΠΎΠ³Π°, ΠΈ ΠΌΠ½Π΅ Π½Π°Π΄ΠΎ Π·Π½Π°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π² Π½Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Π― ΠΌΠΎΠ³ Π±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π½Π° ΡΠΈΡ. 7, Π½ΠΎ ΠΎΠ½ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ, Π° Π·Π½Π°ΡΠΈΡ, ΠΏΠΎΠΌΠ΅ΡΡΠΈΡ Π² ΠΏΠ°ΠΌΡΡΡ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΡΡ ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ.
Π ΠΈΡ. 7. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ
ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈ Π±ΡΠ» ΡΠ΅Π°Π»ΡΠ½ΠΎ Π½ΡΠΆΠ΅Π½, ΠΏΡΠΈΡΠ»ΠΎΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π·Π°Π½ΡΠ²ΡΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΌΡΡΠΈ.
Π ΡΡΠ°ΡΡΡΡ, ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Entry ΠΎΠ±ΡΠ΅ΠΊΡΠ° DbContext Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π±Π»ΠΎΠ³ΠΎΠΌ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ LINQ-Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ, Ρ ΠΌΠΎΠ³Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π² ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Count ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π²Π΅ΡΡ Π·Π°ΠΏΡΠΎΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π²Π΅ΡΠ½ΡΠ»Π° ΠΌΠ½Π΅ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ (ΡΠΈΡ. 8).
Π ΠΈΡ. 8. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ DbContext Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π·Π°ΠΏΡΠΎΡΠ° ΠΈ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ ΡΠ΅ΡΡΡΡΠΎΠ²
Π‘ΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ
ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ ΠΌΡ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ. Π’Π΅ΠΏΠ΅ΡΡ Π·Π°Π³Π»ΡΠ½Π΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π² Π±ΡΠ΄ΡΡΠ΅Π΅ ΠΈ ΠΏΠΎΡΠ°Π·ΠΌΡΡΠ»ΠΈΠΌ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π²Π΅ΡΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊ ΠΊΠΎΠ½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°:
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ MultipleActiveResultSets. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π°ΠΊΡΠΈΠ²Π½Ρ Π΄Π²Π° Π·Π°ΠΏΡΠΎΡΠ°. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π·Π°ΠΏΡΠΎΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π±Π»ΠΎΠ³ΠΎΠΌ, Π² ΡΠΈΠΊΠ»Π΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π±Π»ΠΎΠ³ΠΎΠ².
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Code First Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π΅ΡΠ»ΠΈ ΡΠ΅Π»Π΅Π²ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π΅Ρ. ΠΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΈ β ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ ΠΈΠΌΠ΅Π΅ΡΡΡ DBA, ΡΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π²Π΅ΡΠΎΡΡΠ½Π΅Π΅, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ DBA Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π·Π° Π²Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠΎ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ» Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΡ Π΅ΠΌΡ ΡΠ΄Π°Π»ΡΠ» ΠΈ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π» Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΡΠ²Π½ΠΎ Π½Π΅ ΡΠΎ, ΡΡΠΎ Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅ΡΠ΅ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΏΡΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΈ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° App.config (ΠΈΠ»ΠΈ Web.config Π΄Π»Ρ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ). Π ΡΠ°Π·Π΄Π΅Π» appSettings Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π·Π°ΠΏΠΈΡΡ Ρ ΠΊΠ»ΡΡΠΎΠΌ DatabaseInitializerForType, Π° Π·Π° Π½ΠΈΠΌ ΠΈΠΌΡ ΡΠΈΠΏΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ ΡΠ±ΠΎΡΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΠΈΠ±ΠΎ Β«DisabledΒ», Π»ΠΈΠ±ΠΎ ΠΈΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ±ΠΎΡΠΊΠΈ, Π³Π΄Π΅ ΠΎΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½.
TΠ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π»ΡΠ±Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°:
Π Π·Π΄Π΅ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ°, Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ:
Π£ΡΠ΅ΡΠ½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΡΠ»ΠΈ Π²Ρ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π²Π°ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΠΎΠ΄ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΅ΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΡ Π΅ΠΌΡ. ΠΡΠ»ΠΈ ΡΡΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊ ΠΈ ΠΎΡΡΠ°Π½ΡΡΡΡ, ΡΠ΅Π·ΠΊΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ΅Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ³ΡΠΎΠ·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ²Π΅ΡΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π΄Π°Π½Π½ΡΠ΅.
| ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Code First Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π΅ΡΠ»ΠΈ ΡΠ΅Π»Π΅Π²ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π΅Ρ. |
ΠΠ΄Π΅ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΠΏΠΎΠΊΠ°Π·Π°Π», ΠΊΠ°ΠΊ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Code First ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ DbContext API; ΠΎΠ±Π΅ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π² ADO.NET Entity Framework 4.1. ΠΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ API Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡ Π΅ΠΌΡ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Code First. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ API Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΡΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΡΡΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°Ρ . ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Ρ Π²ΡΡΠΊΠ°Π·Π°Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ Code First Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ.
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Π»ΡΠ±ΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°Ρ , ΠΏΠΎΡΠ²ΠΈΠ²ΡΠΈΡ ΡΡ Π² Entity Framework 4.1, Π·Π°ΠΉΠ΄ΠΈΡΠ΅ Π½Π° ΡΠ°ΠΉΡ msdn.com/data/ef. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π½Π° ΡΠΎΡΡΠΌΠ΅ Data Developer Center (bit.ly/166o1Z) Π²Π°ΠΌ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠΌΠΎΠ³ΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Entity Framework 4.1.
Π ΠΎΡΡΠ½ ΠΠΈΠ»Π»Π΅Ρ β ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² Π³ΡΡΠΏΠΏΠ΅ Microsoft Entity Framework. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Entity Framework ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π² Π΅Π³ΠΎ Π±Π»ΠΎΠ³Π΅ Π½Π° romiller.com.
ΠΡΡΠ°ΠΆΠ°Ρ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ½ΠΎΡΡΡ Π·Π° ΡΠ΅ΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠΈ ΡΠΊΡΠΏΠ΅ΡΡΡ ΠΡΡΡΡΡ ΠΠΈΠΊΠ΅ΡΡΡ (Arthur Vickers).
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π±Π°Π· Π΄Π°Π½Π½ΡΡ Ρ Code First
ΠΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎ ΠΏΡΠΈΠ½ΡΡΠΎ, ΡΡΠΎ Π² Β«ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ Β» CRUD ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΠΎ Π³Π»Π°Π²Ρ ΡΠ³Π»Π°. ΠΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΡΡΡ ΡΠ°ΠΌΠΎΠΉ ΠΏΠ΅ΡΠ²ΠΎΠΉ, ΠΎΠ½Π° ΠΎΠ±ΡΠ°ΡΡΠ°Π΅Ρ Ρ ΡΠ°Π½ΠΈΠΌΡΠΌΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌΠΈ (stored procedures), Ρ Π½Π΅ΠΉ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡΡ Π²ΠΎΠ·ΠΈΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ. ΠΠΎ ΡΡΠΎ Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΡΡ! ΠΠ»Ρ Entity Framework Π΅ΡΡΡ Code First ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π³Π΄Π΅ Π³Π»Π°Π²Π½ΡΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΠΎΠ΄, Π° Π½Π΅ Π±Π°Π·Π°. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°:
ΠΡΡΡ ΠΈ ΠΏΠ°ΡΠ° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ², Π½ΠΎ ΠΎΠ½ΠΈ ΡΠΊΠΎΡΠ΅Π΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ Entity Framework, Π° Π½Π΅ Ρ Code First ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΡΠΌ; ΠΎ Π½ΠΈΡ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΠΈΠΆΠ΅ Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Ρ Code First ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΏΡΠΎΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ:
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠΎΠ½Ρ-ΡΠ½Π΄Π° Π±ΡΠ΄Π΅Ρ ASP.NET MVC, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ No Authentication β Π² ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π½Π΅Π»ΡΠ·Ρ Π±ΡΠ΄Π΅Ρ Π»ΠΎΠ³ΠΈΠ½ΠΈΡΡΡΡ ΠΈ Π²Π΅ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Π²ΡΠ΅Ρ .
Π― ΡΠ΄Π΅Π»Π°Π» Π΅ΡΠ΅ 2 ΠΏΡΠΎΠ΅ΠΊΡΠ° β Π΄Π»Ρ Π±ΠΈΠ·Π½Π΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ DAL, Π½ΠΎ ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΠ°ΠΏΠΊΠΈ Π² web ΠΏΡΠΎΠ΅ΠΊΡΠ΅. ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Entity Framework Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠ΅ΡΠ΅Π· NuGet.
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΡΡΡΠ½ΠΎΡΡΠΈ (entities):
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Π²ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠ΅Π΅ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° (properties) ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ Π² Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ Π±ΡΠ΄Π΅Ρ Primary Key ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° ΡΠΈΠΏΠ° Guid, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² Π±Π°Π·Ρ.
Grade β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ½ΡΠΌΠ΅ΡΠ°ΡΠΎΡ, Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠ³ΠΎ:
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ:
ΠΡΠ½ΠΎΡΠ΅Π½ΠΈΡ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Ρ ΡΠ΅ΡΠ΅Π· Fluent API, ΡΠΈΡΠ°ΡΡΡΡ Ρ ΠΊΠΎΠ½ΡΠ° β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Student β Enrollment ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊΠ°ΠΊ one (Student): many (Enrollment).
Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π· Fluent API, ΡΠ°ΠΊ ΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ. ΠΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π½ΠΎ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΌΠΈΠΌ. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ Π²ΡΠ΅-ΠΆΠ΅ Fluent API.
Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΠΌΠΈ:
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ DropCreateDatabaseIfModelChanges, Π±Π°Π·Π° Π±ΡΠ΄Π΅Ρ Π΄ΡΠΎΠΏΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ
Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
ΠΊΠ»Π°ΡΡΠ°Ρ
ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. Π’ΠΎ Π΅ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ β ΠΊΠ°ΠΏΡΡ.
ΠΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΠΊΠ°ΠΏΡΡ, Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° ΠΎΠ±Π»Π°ΡΡΡ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ.
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅, ΡΡΠΎ Π½Π°Π΄ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ β Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² web.config. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ LocalDb, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Visual Studio, ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΉ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΈΠ΄Π΅Ρ Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ configuration:
Π ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠ° β Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ entityFramework:
Π Π°ΡΡΠΈΠ±ΡΡΠ΅ type ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° context ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ assembly, Π³Π΄Π΅ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ databaseInitializer.
ΠΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ΠΌ-ΡΠΎ ΠΈ Π²ΡΠ΅, ΠΏΡΠΎΠ΅ΠΊΡ Π³ΠΎΡΠΎΠ² ΠΊ Π·Π°ΠΏΡΡΠΊΡ.
Π‘ΠΊΠ°ΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎ. Π’Π°ΠΊ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ΠΌ-ΡΠΎ ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ Π½ΡΠ»Ρ.
Π§Π°ΡΡΠΎ ΠΏΠΎΠ΄Π½ΠΎΠΆΠΊΠΈ ΡΡΠ°Π²ΠΈΡ Entity Framework, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° β Π΅ΡΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΈ, ΡΡΠΎ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, property ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Id, Π±ΡΠ΄Π΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ Π² Primary Key ΡΠ°Π±Π»ΠΈΡΡ. ΠΠ½Π΅ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ.
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΡ
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Code First ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π² Entity Framework Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ½Π°Ρ ΡΠ΅ΠΌΠ°. Π― Π½Π΅ ΠΊΠ°ΡΠ°Π»ΡΡ Π²ΠΎΠΏΡΠΎΡΠ° ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ, ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡΡ (concurrency) ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. ΠΡΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Ρ ΠΌΠΎΠ³Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΡΡ ΡΠ΅ΠΌΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ ΡΡΠ°ΡΡΡΡ .
1. Getting started with Entity Framework 6 Code First using MVC 5
2. Database initialization in Code-First
3. Lerman J., Miller R. β Programming Entity Framework. Code First (2011)
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Entity Framework Core code-first Ρ Π‘Π£ΠΠ SQLite ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ WinForms-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² VisualStudio 2015
Π ΡΠ²ΠΎΠΈΡ ΠΏΠΎΠΏΡΡΠΊΠ°Ρ ΡΠ΅ΡΠΈΡΡ ΡΠ°ΠΊΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ Π·Π°Π΄Π°ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ WinForms Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ EF Core Π² VisualStudo 2015 Ρ Π½Π°ΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Π½Π° ΡΠ΅Π»ΡΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΈΠΏΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΡΡΠΎ, ΡΡΠΎ Π² ΡΡΡΠΎΡΠΈΠ°Π»Π°Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠ΅ ΠΈ Ρ.ΠΏ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π³ΠΈ ΠΈΠ· ΡΠ΅Ρ , ΡΡΠΎ Ρ ΠΏΡΠΈΠ²Π΅Π΄Ρ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π½Π°ΡΡΠΏΡΠ²Π°ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π² ΡΠ»Π΅ΠΏΡΡ, Π³ΡΠ³Π»Ρ, Π·Π°Π΄Π°Π²Π°Ρ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΡ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°Π³ΠΎΠ², ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ°Π»ΠΎ ΠΈΡΠΏΡΠ°Π²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ Π±ΡΠ»ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
1. Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Windows Management Framework 5.0 ΡΡΠΎΠ±Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ PowerShell Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 5.0. Π£ ΠΌΠ΅Π½Ρ (ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Windows 7 ΠΈ Visual Studio 2015 ΠΈ Π²ΡΠ΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΊ Π½ΠΈΠΌ) Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π±ΡΠ»Π° Π²Π΅ΡΡΠΈΡ 2.0 ΠΈ Π΄Π°Π»Π΅Π΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ
3. ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Visual Studio Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌΠΈ NuGet. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π»ΠΈΠ±ΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°Π΅ΠΌ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²Π΅ΡΡΠΈΡ 3.5.0.1996 ΠΏΠΎ ΠΏΡΡΠΌΠΎΠΉ ΡΡΡΠ»ΠΊΠ΅ Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Visual Studio ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.
6. Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΡΠ°ΠΉΠ»Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΠΏΠΎΡΡΠ΄ΠΊΠ° Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠ» ΠΈΡ Π² ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΡ Β«ModelΒ» (Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡ Π΅Ρ Β«EntitiesΒ», Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΈΠ΄Π°ΡΡ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π² ΠΊΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈ Π²ΠΎΠ²ΡΠ΅ Π² ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ»). ΠΠΎΠ΄Π΅Π»Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠ΅Π±Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Ρ ΡΠ°Π½ΡΡΠ΅ΠΉ ΡΠΏΠΈΡΠΎΠΊ Π³ΠΎΡΠΎΠ΄ΠΎΠ² ΠΈ Π»ΡΠ΄Π΅ΠΉ Π²/ΠΈΠ· Π½ΠΈΡ . ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π³ΠΎΡΠΎΠ΄ΠΎΠΌ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ½ Π³ΠΎΡΠΎΠ΄Π° Π²ΠΎΠΎΠ±ΡΠ΅.
7. Π Π°Π·ΡΠ΅ΡΠ°Π΅ΠΌ ΡΠΊΡΠΈΠΏΡΡ PowerShell, Π΅ΡΠ»ΠΈ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ° «. \packages\Microsoft.EntityFrameworkCore.Tools.1.1.0-preview4-final\tools\init.ps1 cannot be loaded because running scripts is disabled on this system.» ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ NuGet (Π²ΡΠ±ΡΠ°ΡΡ Tools β NuGet Package Manager β Package Manager Console Π² ΠΌΠ΅Π½Ρ) ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
8. Π‘ΠΎΠ·Π΄Π°ΡΠΌ Β«ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈΒ». ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ, ΡΠΎΡ ΡΠ°Π½ΠΈΠ² ΠΈ ΠΎΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π² Π½Π°Ρ ΠΊΠΎΠ΄ (ΠΏΡΠΎΡΡΠΎ ΡΡΠΎΠ±Ρ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΡΡΡ Π² ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΠ²Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΠΊ) ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ NuGet ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Ρ Π½Π°Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΠΏΠ°ΠΏΠΊΠ° Β«MigrationsΒ» ΠΈ Π΄Π²Π° ΡΠ°ΠΉΠ»Π° Π² Π½Π΅ΠΉ: Β«Vs2015WinFormsEfcSqliteCodeFirst20170304ExampleContextModelSnapshot.csΒ» ΠΈ Β«20170304204355_Vs2015WinFormsEfcSqliteCodeFirst20170304ExampleMigration.csΒ» (ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ ΡΠΈΡΠ»ΠΎ Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Ρ Π²Π°Ρ Π±ΡΠ΄Π΅Ρ Π΄ΡΡΠ³ΠΎΠ΅ β ΡΡΠΎ Π½ΠΈ ΡΡΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Π΄Π°ΡΠ° ΠΈ Π²ΡΠ΅ΠΌΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π² ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅, Ρ Π΅Ρ ΠΏΠΎΡΠΎΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ΄Π°Π»ΠΈΠ» ΠΎΡΡΠ°Π²ΠΈΠ² ΡΠΎΠ»ΡΠΊΠΎ Β«Vs2015WinFormsEfcSqliteCodeFirst20170304ExampleMigration.csΒ»).
9. Π Π΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ (unique constraint, ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΠΊΠ°ΠΊ Π²ΡΠΎΡΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ) Π½Π° ΠΈΠΌΡ Π³ΠΎΡΠΎΠ΄Π° (Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π±ΡΠ²Π°ΡΡ Π³ΠΎΡΠΎΠ΄Π° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½ΠΎ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π±ΡΠ΄Π΅Ρ Π½Π΅ Π»ΠΈΡΠ½ΠΈΠΌ)
10. ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ» ΠΠ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ NuGet Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
Π€Π°ΠΉΠ» ΠΠ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π² ΡΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ exe-ΡΠ½ΠΈΠΊ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎ «. \Vs2015WinFormsEfcSqliteCodeFirst20170304Example\bin\Debug\Vs2015WinFormsEfcSqliteCodeFirst20170304Example.sqlite».
ΠΠ° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π²Π½ΡΡΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° sqlite3 ΠΈΠ»ΠΈ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠΉ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΠΉ GUI ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ DB Browser for SQLite, ΠΈ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΡΡΡ, ΡΡΠΎ ΡΠ°Π±Π»ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π»ΠΈΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ. ΠΠΎΠΌΠΈΠΌΠΎ Π½Π°ΡΠΈΡ ΡΠ°Π±Π»ΠΈΡ Β«CitiesΒ» ΠΈ Β«PeopleΒ» ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π°ΠΉΠ΄ΡΠΌ ΡΠ°ΠΌ ΡΠ°Π±Π»ΠΈΡΡ Β«__EFMigrationsHistoryΒ» ΡΠΎ ΡΠ»ΡΠΆΠ΅Π±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ EF Core ΠΈ Β«sqlite_sequenceΒ» ΡΠΎ ΡΠ»ΡΠΆΠ΅Π±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ SQLite.
11. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΡΠΌ ΠΊ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡ Π½Π°ΡΠ΅ΠΉ ΡΠΎΡΠΌΡ, ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠΌ Π½Π° Π½Π΅ΠΉ ΠΊΠ½ΠΎΠΏΠΎΡΠΊΡ, ΡΡΠ»ΠΊΠ½Π΅ΠΌ ΠΈ Π½Π° Π½Π΅ΠΉ Π΄Π²Π°ΠΆΠ΄Ρ ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠΆΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π·Π°ΠΏΠΈΡΡΠΌΠΈ ΠΠ. Π― Π΅ΡΡ ΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ²ΡΡΠΊΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°ΡΡ Form1 Π² MainForm ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΠΎ ΡΠΌΡΡΠ»Ρ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ» button1 Π² mainButton), Π½ΠΎ ΡΡΠΎ Π΄Π΅Π»ΠΎ Π²ΠΊΡΡΠ° ΠΈ ΠΏΡΠΈΠ½ΡΡΡΡ Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ.
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ Π²Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΠ΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Π±ΠΎΠ³Π°ΡΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π±ΠΎΠ»Π΅Π΅ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ, Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
Π‘ΠΊΠ°ΡΠ°ΡΡ Π²Π΅ΡΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΈ ΡΠΎΠΏΡΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ.
ΠΠΎΠ΄Ρ ΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Entity Framework
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Entity Framework Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Entity Framework Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ : Code-First, Model-First ΠΈ Database-First. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΈ ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΈΡ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ·, Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ°ΡΡΡΡ .
ΠΠΎΠ΄Ρ ΠΎΠ΄ Code-First
, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² Entity Framework 4.1, ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΊΠΎΠ΄Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Customer, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠΊΡΠΏΠ°ΡΠ΅Π»Ρ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅:
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±Π΅Π· ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ±Π°Π²ΠΈΠ² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄, Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° Π΄ΠΈΡΠΊΠ΅ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ XML ΠΈΠ»ΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΡΡΠΏΠ½ΡΠΌ, ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . ΠΡΠ° ΡΠ° ΡΠΎΡΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Code-First β Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΡΡΡ ΠΎ Π΄Π΅ΡΠ°Π»ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ (ΡΡΠΈΠΌ Π·Π°ΠΉΠΌΠ΅ΡΡΡ Entity Framework), Π° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π΅.
ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ , Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ»Π΅ Id, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°. Entity Framework Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ»Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ (Π² Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ ΡΡΡΠΎΠΊΠ° βIdβ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»Π΅ CustomerId Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°.) ΠΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π² ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ C#, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Entity Framework. ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΈΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ, Ρ Π»ΠΈΡΡ Π·Π°ΠΎΡΡΡΠΈΠ» ΡΠ²ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π»ΡΠ±ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΈ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ ΠΈ Ρ.Π΄. ΠΏΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Code-First ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ (Ρ.Π΅. Π² ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅ C#), Π° ΠΏΠΎΡΠΎΠΌ ΠΏΡΠΎΠ΅ΡΠΈΡΡΡΡΡΡ Π½Π° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ΄Ρ ΠΎΠ΄ Code-First ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² Model-First ΠΈ Database-First ΠΈ, ΠΊΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ ΠΏΠΎΠ½ΡΠ»ΠΈ, Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΎΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ EDM ΠΈΠ»ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ (SQL Server Management Studio ΠΈ T-SQL). ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ CLR (Common Language Runtime) ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ POCO (Plain Old CLR Object).
ΠΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ Code-First, Π²Ρ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π½Π° Entity Framework. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΎΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ΅ΡΠΈΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΡΡΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² ΠΊΠΎΠ΄Π΅ ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π΅. ΠΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΠ°Π·ΠΈΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΡΠ΅ ΡΠ΅ ΠΆΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ.
ΠΠ°ΠΆΠ½ΡΠΌ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π²Π΅ΡΡΠΈΠΈ Entity Framework 5 Π² ΠΏΠ»Π°Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Code-First, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠ°Π·Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ½ΠΎΡΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ Π΄Π°Π½Π½ΡΡ EDM (Entity Data Model), ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡΠΏΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ» EDMX. Π Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Code-First, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ°ΠΉΠ»ΠΎΠΌ EDMX, Ρ.Π΅. ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΡΠ°Π·Ρ Π² Π΄Π²ΡΡ ΠΌΠ΅ΡΡΠ°Ρ . ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ» ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΡΡΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π·Π°Π±ΡΠ²Π°Π» ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ .
Π§ΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠ΅Π΄Π΅ Visual Studio, ΡΡΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ EDM, Π½ΡΠΆΠ½ΠΎ Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ±ΠΎΡΠΊΠΈ Entity Framework Π² ΠΏΡΠΎΠ΅ΠΊΡ, Π° Π²ΠΎ-Π²ΡΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° DbContext, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ System.Data.Entity, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅ (ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Entity Framework ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΌΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΠΎΠ·ΠΆΠ΅):
ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡ ΠΎ ΡΠΏΠΎΡΠΎΠ±Π°Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Entity Framework ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΡΠ΄ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΡΠ°Π²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Customer, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅:
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΌ, Π½ΠΎ Π²ΡΠ΅ ΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Entity Framework. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π³Π»ΡΠ±ΠΆΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΈ Π΄Π°Π΅Ρ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Π² Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ°ΡΡΡΡ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Code-First, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ.
ΠΠΎΠ΄Ρ ΠΎΠ΄ Model-First
, Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΏΠΎΡΠ²ΠΈΠ²ΡΠΈΠΉΡΡ Π² Π²Π΅ΡΡΠΈΠΈ Entity Framework 4, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Ρ ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π‘Π£ΠΠ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Ρ ΠΎΡΡΡ Π²ΡΡΡΠ½ΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ EDM. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΎ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Entity Framework. ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠ΅ EDM ΡΡΠ΅Π΄Ρ Visual Studio. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Model-First Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅, Π³Π΄Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ASP.NET.
Π Π°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Model-First Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π² ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΡΠ΅ΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠΈ ΡΡΠΎΠΌ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°Π½ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π±Π°Π· Π΄Π°Π½Π½ΡΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠ΅ ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ SQL ΠΏΠΎΠ»Π΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ.
ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Code-First, Π²ΡΡ ΡΠ°Π±ΠΎΡΠ° ΡΡΡΠΎΠΈΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ Π² ΡΡΠΈΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π½Π°ΠΏΠΎΠ»Π½ΠΈΡΡ Π΅Π³ΠΎ Π΄Π°Π½Π½ΡΠΌΠΈ.
Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΡ DbContext (Π² ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Code-First ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π²ΡΡΡΠ½ΡΡ, Π² Model-First ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΡΡΠ½ΠΎΡΡΠ½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ).
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠ»Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
ΠΠΎΠ΄Ρ ΠΎΠ΄ Database-First
ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅, ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠΎΡΠ»Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠ½ΠΎΡΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠ· ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΠ°Π±ΠΎΡΠ° Ρ Entity Framework Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°ΠΌ Code-First ΠΈ Model-First. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π·Π°Π΄Π°Ρ.
Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ Ρ Entity Framework ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ Π΄Π°Π½Π½ΡΡ
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Entity Framework, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ Π΄Π°Π½Π½ΡΡ , ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ Ρ Entity Framework. ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ½ΠΎΡΡΠ½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ (Π‘Π£ΠΠ). Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ½ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° ΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ C# Π½ΡΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Database-First, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ SQL Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ, ΠΏΡΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ EDMX Π½Π° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
Visual Studio ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠΌ Π΄Π°Π½Π½ΡΡ SqlClient, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Ρ Π²Π΅ΡΡΠΈΠΉ Π‘Π£ΠΠ SQL Server: 2005, 2008, 2010, 2012, 2014. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ Visual Studio 2010, Microsoft ΠΎΡΠΊΠ°Π·Π°Π»Π°ΡΡ ΠΎΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ SQL Server 2000. ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΡΠ°ΡΠ°ΡΡΠ΅Π΅ΡΡ ΠΊ SQL Server Compact. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠΎΠ³ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡ Π΅ΠΌΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠ΄Ρ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ Π‘Π£ΠΠ. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΈ Π΄Π°Π½Π½ΡΡ Entity Framework ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ Π‘Π£ΠΠ: MySQL, Oracle, Progress, VistaDB, Devart, OpenLink, SQL Anywhere, Sybase, SQLite, Synergex, Firebird ΠΈ PostgreSQL (ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊ Npgsql).
Π ΡΠΏΠΈΡΠΊΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ² ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Access Microsoft. Π’Π°ΠΊΠΆΠ΅ Entity Framework Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠ°ΡΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ°, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Open Database Connectivity (ODBC). ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Entity Framework Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ EF-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΉ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ Π΄Π»Ρ Π½Π΅Π΅. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ± ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² ΡΡΠ°ΡΡΠ΅ «EF5 Sample Provider».
ΠΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ Π½ΡΠΆΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄?
ΠΠ°Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ Π·Π°Π΄Π°Π΅Ρ ΡΠ΅Π±Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Entity Framework. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠ²Π΅ΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ΅Π»Π΅ΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ Π½ΡΠ»Ρ ΠΈ Ρ Π²Π°Ρ Π½Π΅Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Model-First. ΠΡΠ»ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π΅ΡΡΡ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Database-First. ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Entity Framework Π² ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π³Π΄Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ , Π»ΠΎΠ³ΠΈΡΠ½Π΅Π΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Code-First.
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠ²Π΅ΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΡΠ΄ΠΎΠ±Π½ΡΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Database-First ΡΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΠΈ Π·Π½Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Ρ T-SQL, Ρ.ΠΊ. ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π²ΡΡΡΠ½ΡΡ. Model-First Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ.ΠΊ. ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΡΠ΅Π΄Ρ ΠΈ Π°Π±ΡΡΡΠ°Π³ΠΈΡΡΠ΅ΡΡΡ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ. Code-First Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² C#, Ρ.ΠΊ. ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π΄Π΅ΡΠ°Π»ΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΊΠΎΠ΄Π°.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΠ²ΠΎΠ΄ΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Entity Framework:





















































































































