Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π½Π° систСми Π·Π° миграция Π½Π° Π΄Π°Π½Π½ΠΈ

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π½Π° систСми Π·Π° миграция Π½Π° Π΄Π°Π½Π½ΠΈ

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π½Π° систСми Π·Π° миграция Π½Π° Π΄Π°Π½Π½ΠΈ

ΠœΠΎΠ΄Π΅Π»ΡŠΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΈΠΌΠ° тСндСнция Π΄Π° сС промСня ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° процСса Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Π² Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ прСстава Π΄Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Π Π°Π·Π±ΠΈΡ€Π° сС, Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚Π° ΠΈ слСд Ρ‚ΠΎΠ²Π° ORM Ρ‰Π΅ създадС Π½ΠΎΠ²Π° вСрсия, която Ρ‰Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° ΠΌΠΎΠ΄Π΅Π»Π°, Π½ΠΎ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π·Π°Π³ΡƒΠ±Π° Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ Π΄Π°Π½Π½ΠΈ. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ функцията Π½Π° систСмата Π·Π° миграция Π΅ Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° промяна Π½Π° схСмата тя сС синхронизира с ΠΌΠΎΠ΄Π΅Π»Π° Π½Π° Π΄Π°Π½Π½ΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π±Π΅Π· Π΄Π° сС губят ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ Π΄Π°Π½Π½ΠΈ.

Π’ Ρ‚Π°Π·ΠΈ статия Π±ΠΈΡ…ΠΌΠ΅ искали Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ инструмСнти Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. НадявамС сС, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Ρ‰Π΅ бъдС ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, ΠΈΠ·ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΈΠ·Π±ΠΎΡ€.

Π—Π°Π΄Π°Ρ‡Π°

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π°ΡˆΠ°Ρ‚Π° компания Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° слСдващото ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° - Docs Security Suite (DSS). Π‘ΡŠΡ€Π²ΡŠΡ€Π½Π°Ρ‚Π° част Π΅ написана Π½Π° .Net Core, Π° Entity Framework Core сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ Π‘Π£Π‘Π”. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Code First.

ΠœΠΎΠ΄Π΅Π»ΡŠΡ‚ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС създава ΠΎΡ‚ няколко Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ - всСки отговаря Π·Π° собствСната си логичСска част Π½Π° систСмата.

ΠŸΡ€Π΅Π΄ΠΈΡˆΠ½ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Π½Π° DSS ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° класичСскитС Entity Framework Migrations (EF 6) ΠΊΠ°Ρ‚ΠΎ систСма Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° миграцията. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° срСщу Π½Π΅Π³ΠΎ сС Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Ρ…Π° някои оплаквания, основното ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ бСшС, Ρ‡Π΅ Π½Π° EF липсва Ρ€Π°Π·ΡƒΠΌΠ΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ Π½Π° вСрсии. Π’ΠΎΠ·ΠΈ Ρ„Π°ΠΊΡ‚ всС ΠΎΡ‰Π΅ Π½ΠΈ разстройва, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ бСшС Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° дискусията бяха Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½ΠΈ слСднитС изисквания към систСмата Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° миграцията:

  1. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π‘Π£Π‘Π”. Π—Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ MS SQL Server, PostgreSQL, Oracle, Π½ΠΎ Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ възмоТно Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ
  2. Π Π°Π±ΠΎΡ‚Π° с ORM ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° EF Core, Π½ΠΎ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π΄Ρ€ΡƒΠ³ΠΈ ORM бяха Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π½ΠΈ
  3. Автоматично Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ. ΠšΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π½Π° Code First, Π±ΠΈΡ… искал Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π° нСобходимостта ΠΎΡ‚ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ β€žΡ€ΠΈΡΡƒΠ²Π°Π½Π΅ с Ρ…ΠΈΠΌΠΈΠΊΠ°Π»ΠΊΠΈβ€œ.
  4. ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ Π½Π° вСрсиитС. Π’ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° срСда Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΏΡ€ΠΈ сливанС, EF Core ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π΅ Π² ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ. Π’ΠΎΠ²Π° сС ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π° Π² сСриозСн ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ части Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ са създадСни ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ трябва Π΄Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° всяка
  5. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π° докумСнтация ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°. Π’ΡƒΠΊ, струва Π½ΠΈ сС, Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ обяснСниС.
  6. Π‘Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎ. ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡΡ‚ Π΅ условСн, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ скъпи систСми ΠΈΠ»ΠΈ скъпи, Π½ΠΎ ΠΈΠ΄Π΅Π°Π»Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ удобство, ΡΡŠΡ‰ΠΎ бяхмС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅ бяха ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈ слСднитС ΠΎΠΏΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ бяха счСтСни Π·Π° ΠΆΠ΅Π»Π°Ρ‚Π΅Π»Π½ΠΈ Π·Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅:

  1. ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° EF Core
  2. DBup
  3. ΠšΡ€ΡŠΠ³Π»Π° ΠΊΡŠΡ‰Π°E
  4. ThinkingHome.Migrator
  5. Fluent Migrator

А сСга ΠΎΡ‰Π΅ ΠΌΠ°Π»ΠΊΠΎ

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π½Π° систСми Π·Π° миграция Π½Π° Π΄Π°Π½Π½ΠΈ
Основни ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° EntityFramework

ЕстСствСно Ρ‚ΠΎΠ²Π° бСшС ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΈ основСн Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π·Π° ΠΈΠ·Π±ΠΎΡ€. Π ΠΎΠ΄Π΅Π½ инструмСнт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΎΡ‚ кутията Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Ρ‚Π°Π½Ρ†ΠΈ Π½Π° Ρ‚Π°ΠΌΠ±ΡƒΡ€Π°. Голямо количСство докумСнтация, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π°, простотия ΠΈ Ρ‚.Π½. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° Ρ‚Π²ΡŠΡ€Π΄Π΅Π½ΠΈΡΡ‚Π° срСщу класичСския EF са доста подходящи ΠΈ Π·Π° EF Core.

По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ΠΏΠ»ΡŽΡΠΎΠ²Π΅Ρ‚Π΅ са ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΈ Π·Π° EF Core:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Microsoft, докумСнтация, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π° руски, ΠΎΠ³Ρ€ΠΎΠΌΠ½Π° общност
  • Автоматично Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° CodeFirst
  • Π’ сравнСниС с EF 6, EF Core Π²Π΅Ρ‡Π΅ Π½Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½Π° снимка Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Π Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π²Π΅Ρ‡Π΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с EF Core Π² Code First
  • Въй ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π½Ρ†ΡƒΠ²Π°ΠΌΠ΅ ΠΎΡ‚ Code First, Π΅ възмоТно Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΠΌ Π΅Π΄Π½Π° миграция към всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ доставчици Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π΄Π°Π½Π½ΠΈ
  • Π©ΠΎ сС отнася Π΄ΠΎ доставчицитС, Ρ‚ΠΎΠΉ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° PostgreSQL, Oracle ΠΈ Ρ‚.Π½. ΠΈ Ρ‚.Π½. ΠΈ Π΄ΠΎΡ€ΠΈ MS SQL Server 

И ΡΡŠΡ‰ΠΎ минуси:

  • Π Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ остава ΡΡŠΡ‰ΠΎΡ‚ΠΎ. НСобходимо Π΅ Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ послСдоватСлност ΠΎΡ‚ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π΄Π° сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈΡ‚Π΅ снимки Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ
  • Зависимост ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ, въз основа Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ

DbUp

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π½Π° систСми Π·Π° миграция Π½Π° Π΄Π°Π½Π½ΠΈ
dbup.github.io

DbUp Π΅ .NET Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, която сС инсталира ΠΎΡ‚ NuGet ΠΈ ΠΏΠΎΠΌΠ°Π³Π° Π·Π° натисканС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² SQL Server. Π’ΠΎΠΉ слСди ΠΊΠΎΠΈ скриптовС Π·Π° промяна Π²Π΅Ρ‡Π΅ са Π±ΠΈΠ»ΠΈ изпълнСни ΠΈ изпълнява Ρ‚Π΅Π·ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΅ израснала ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° машина Π·Π° Π±Π»ΠΎΠ³ΠΎΠ²Π΅ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ Π½Π° ASP.NET ΠΈ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Π½Π° MIT, Π° ΠΊΠΎΠ΄ΡŠΡ‚ Π΅ Π² GitHub. ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ са описани с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° T-SQL.

Какви са прСдимствата Ρ‚ΡƒΠΊ:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° голям Π±Ρ€ΠΎΠΉ Π‘Π£Π‘Π” (MS SQL Server, PstgreSQL, MySQL)
  • Въй ΠΊΠ°Ρ‚ΠΎ скриптовСтС са написани Π½Π° T-SQL, Ρ‚Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ доста прости.
  • ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈΡ‚Π΅ ΡΡŠΡ‰ΠΎ сС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ със SQL

И минуситС:

  • Π‘ цялото Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ Π‘Π£Π‘Π”, Oracle Π½Π΅ Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ тях
  • НС взаимодСйства с ORM
  • ΠŸΠΈΡΠ°Π½Π΅Ρ‚ΠΎ Π½Π° скриптовС Π² T-SQL с β€žΡ€ΡŠΠΊΠΎΡ…Π²Π°Ρ‚ΠΊΠΈβ€œ Π½Π΅ Π΅ Ρ‚ΠΎΠ²Π°, към ΠΊΠΎΠ΅Ρ‚ΠΎ сС стрСмихмС
  • ДокумСнтацията ΠΈ общността са Ρ‚Π°ΠΊΠ°-Ρ‚Π°ΠΊΠ°, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° писанСто Π½Π° SQL скриптовС ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ.

ΠšΡ€ΡŠΠ³Π»Π° ΠΊΡŠΡ‰Π°E

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π½Π° систСми Π·Π° миграция Π½Π° Π΄Π°Π½Π½ΠΈ
github.com/chucknorris/roundhouse

Π’ΠΎΠ·ΠΈ инструмСнт Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° миграцията, разпространяван ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Apache 2.0, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ, Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° T-SQL. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ са сС фокусирали Π²ΡŠΡ€Ρ…Ρƒ Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° тСхничСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Π‘Π£Π‘Π”, Π° Π½Π΅ Π²ΡŠΡ€Ρ…Ρƒ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡƒΠ΄ΠΎΠ±Π΅Π½ процСс Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

плюсовС:

  • ΠŸΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° Π‘Π£Π‘Π” (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Oracle)

ΠΏΡ€ΠΎΡ‚ΠΈΠ²:

  • Oracle (ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Access, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π±Π΅Π· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° нас) Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΎΡ‚ .NET Core, Π° само ΠΎΡ‚ .NET Full Framework
  • НС Ρ€Π°Π±ΠΎΡ‚ΠΈ с ORM
  • ΠžΡ‰Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ докумСнтация ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ инструмСнт
  • ΠžΡ‚Π½ΠΎΠ²ΠΎ - ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ сС ΠΏΠΈΡˆΠ°Ρ‚ със скриптовС

ThinkingHome.Migrator

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π½Π° систСми Π·Π° миграция Π½Π° Π΄Π°Π½Π½ΠΈ

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π·Π° вСрсионна миграция Π½Π° схСмата Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ към ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° .NET Core, разпространявана ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·Π° Π½Π° MIT. Бамият Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ писа Π·Π° послСдната ΠΌΡƒ вСрсия ΠΏΡ€Π΅Π΄ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π°.

плюсовС:

  • БъздадСн Π·Π° .NET Core
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° Ρ€Π°Π·ΠΊΠ»ΠΎΠ½Π΅Π½Π° послСдоватСлност ΠΎΡ‚ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΎ рСгистриранС Π½Π° миграцията

ΠΏΡ€ΠΎΡ‚ΠΈΠ²:

  • ΠŸΠΎΡΠ»Π΅Π΄Π½Π°Ρ‚Π° актуализация бСшС ΠΏΡ€Π΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π°. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°
  • НС сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΎΡ‚ Oracle (Π² статията сС посочва, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° сС дълТи Π½Π° липсата Π½Π° стабилна рСализация Π·Π° .NET Core - Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€Π΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π°)
  • Липсва Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ

ΠšΠ°Ρ‚ΠΎ цяло ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΎΠ±Π΅Ρ‰Π°Π²Π°Ρ‰, особСно Π°ΠΊΠΎ сС Ρ€Π°Π·Π²ΠΈΠ΅, Π½ΠΎ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΡƒΠΊ ΠΈ сСга.

Fluent Migrator

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π½Π° систСми Π·Π° миграция Π½Π° Π΄Π°Π½Π½ΠΈ
github.com/fluentmigrator/fluentmigrator

Най-популярният инструмСнт Π·Π° миграция с голяма Π±Π°Π·Π° ΠΎΡ‚ Ρ„Π΅Π½ΠΎΠ²Π΅. Разпространява сС ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π· Apache 2.0. ΠšΠ°ΠΊΡ‚ΠΎ Π΅ посочСно Π² описаниСто, Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° Ρ€Π°ΠΌΠΊΠ° Π·Π° .NET, ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° Ruby on Rails Migrations. ΠŸΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² схСмата Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ са описани Π² C# класовС.

Π’ΡƒΠΊ ΠΈΠΌΠ° плюсовС:

  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° Π‘Π£Π‘Π”
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° .NET Core
  • Голяма Ρ€Π°Π·Π²ΠΈΡ‚Π° общност
  • ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ сС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ послСдоватСлно - посочва сС Ρ€Π΅Π΄ΡŠΡ‚ Π½Π° миграция. ОсвСн Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ възникнС ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ ΠΎΠΊΠΎΠ»ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ‚, ΠΏΡ€ΠΈ обСдиняванСто Π½Π° ΠΊΠΎΠ΄Π° Ρ‚ΠΎΠΉ сС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π° ΠΏΠΎ ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½, ΠΊΠ°ΠΊΡ‚ΠΎ Π² останалата част ΠΎΡ‚ ΠΊΠΎΠ΄Π°.
  • Има ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ слСд ΡƒΡΠΏΠ΅ΡˆΠ½Π° миграция. И Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° носят сСрвизни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.ΠŸΠΎΡΠ»Π΅Π΄Π½Π°Ρ‚Π° актуализация бСшС ΠΏΡ€Π΅Π΄ΠΈ мСсСц, тоСст ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΆΠΈΠ²Π΅Π΅

Π©ΠΎ сС отнася Π΄ΠΎ минуситС, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚ΡƒΠΊ:

  • Липсва Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ
  • Липсва комуникация с EF ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅
  • Няма db ΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΈ снимки

Какъв бСшС Π½Π°ΡˆΠΈΡΡ‚ ΠΈΠ·Π±ΠΎΡ€?

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π±ΠΎΡ€ Π½Π° систСми Π·Π° миграция Π½Π° Π΄Π°Π½Π½ΠΈ

Най-горСщият Π΄Π΅Π±Π°Ρ‚ сС Π²ΡŠΡ€Ρ‚Π΅ΡˆΠ΅ ΠΎΠΊΠΎΠ»ΠΎ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° - Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ. Π”Ρ€ΡƒΠ³ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈ ΠΏΠ»Π°ΡˆΠ΅Ρ…Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π°, въз основа Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ дискусията, Π΅ΠΊΠΈΠΏΡŠΡ‚ Ρ€Π΅ΡˆΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Fluent Migrator Π² новия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π—Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ Ρ‰Π΅ донСсС ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-голям Π±Ρ€ΠΎΠΉ плюсовС.

Π”Π°Π½Π½ΠΈ

Π Π°Π·Π±ΠΈΡ€Π° сС, няма ΠΈΠ΄Π΅Π°Π»Π½ΠΈ инструмСнти. Π’Π°ΠΊΠ° Ρ‡Π΅ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° Π΄Π°Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π° нашия β€žΡΠΏΠΈΡΡŠΠΊ с ΠΆΠ΅Π»Π°Π½ΠΈΡβ€œ, Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΈΠ·Π±ΠΎΡ€. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ Π΅ΠΊΠΈΠΏΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π΅ΡˆΠ°Π²Π°Ρ‰ΠΈ. НадявамС сС, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ своя ΠΈΠ·Π±ΠΎΡ€.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€