Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π±ΠΎΡ€ систСм ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π±ΠΎΡ€ систСм ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π±ΠΎΡ€ систСм ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

МодСль Π΄Π°Π½Π½Ρ‹Ρ… Π² процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ свойство ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ½Π° пСрСстаСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π‘Π” ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° 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 Migrations
  2. DBup
  3. RoundhousE
  4. ThinkingHome.Migrator
  5. Fluent Migrator

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π±ΠΎΡ€ систСм ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…
EntityFramework Core Migrations

ЕстСствСнно, это Π±Ρ‹Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ основной Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для Π²Ρ‹Π±ΠΎΡ€Π°. Нативный инструмСнт, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ плясок с Π±ΡƒΠ±Π½ΠΎΠΌ. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ количСство Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ, простота ΠΈ Ρ‚.Π΄. Однако ΠΏΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΠΈ, ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ²ΡˆΠΈΠ΅ΡΡ ΠΊ классичСскому 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-скриптов ΠΎΠ½ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.

RoundhousE

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π±ΠΎΡ€ систСм ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…
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
  • НСт снимков Π‘Π”

Каков ΠΆΠ΅ Π±Ρ‹Π» наш Π²Ρ‹Π±ΠΎΡ€?

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π±ΠΎΡ€ систСм ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Π°ΠΌΡ‹Π΅ горячиС споры Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΠ»ΠΈΡΡŒ Π²ΠΎΠΊΡ€ΡƒΠ³ Π΄Π²ΡƒΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² – автогСнСрация ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΉ ΠΈ вмСняСмого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΏΡƒΠ³Π°Π»ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ мСньшС. Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ обсуТдСния ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Fluent Migrator. Ибо Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π² дальнСйшСй пСрспСктивС принСсСт Π³ΠΎΡ€Π°Π·Π΄ΠΎ большСС количСство плюсов.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… инструмСнтов Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚. Π’ΠΎΡ‚ ΠΈ Π½Π°ΠΌ для Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ€Π°ΡΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ Π² Π½Π°ΡˆΠΈΡ… Β«Ρ…ΠΎΡ‚Π΅Π»ΠΊΠ°Ρ…Β». Однако, для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹. НадССмся, данная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ