TL; DR czy istnieje jakieś narzędzie do zarządzania migracjami (auto-tworzenie, wykonywanie) (przy użyciu natywnego języka .NET) dla NHibernate?Narzędzie do zarządzania migracją NHibernate, takie jak EntityFramework, Django-South
Pochodzę z tła Django, które zachęca do opracowania Code-First. Istnieje również de facto "standardowa biblioteka" dla migracji, zwana południem. Typowy obieg zmiany schemat jest następujący:
- zmiana kodu modelu (czyli dodawanie/usuwanie/modyfikowanie klas i/lub właściwości) [oczywiście kod model jest w natywnej aplikacji języka - tutaj: python]
- uruchom komendę schemamigration, która automatycznie generuje kod migracji [kod migracji to python] i zapisuje go w podkatalogu "migracje".
- w razie potrzeby dostosuj automatycznie wygenerowany kod. generator automatyczny jest całkiem sprytny, ale nie na tyle sprytny, by posłużyć się np. zmianą nazw kolumn. Komenda Migrate
- prowadzony, który patrzy się katalog „migracje” i wykonuje wszystkie migracje, które nie zostały jeszcze zrealizowane (ta jest obliczana z wykorzystaniem tabeli historii migracji)
Jest to bardzo wygodne nie tylko dla rozwoju (nawet SCRUM, gdzie rzeczy zmieniają się tak szybko), ale także do aktualizacji produkcji - po prostu pamiętaj, aby migracje na serwerach i serwerach produkcyjnych były osobne. Jest także całkiem bezpieczny do produkcji, ponieważ można przejrzeć i opcjonalnie zmodyfikować migrację przed jej zastosowaniem.
Podczas oceny ORMów dla .NET, wypróbowałem Entity Framework 5, który - jak się dowiedziałem - ma bardzo podobną funkcjonalność do tej z Django-South. Istnieje polecenie konsoli menedżera pakietów do tworzenia kodu migracji, który można zmodyfikować przed uruchomieniem. Istnieje osobne polecenie, które wykonuje wszystkie nie wykonane migracje i oznacza je jako wykonane w historii migracji.
Czy istnieje narzędzie do NHibernate?
Jestem świadomy funkcji SchemaUpdate
, ale AFAIK to po prostu aktualizuje wszystkie rzeczy, które należy zaktualizować w jednym kroku. Nie użyłbym tego w produkcji, ani w trakcie rozwoju, w którym utrata danych nie jest katastrofą, ale nadal sprawia ból. Jestem również świadomy, że narzędzie SchemaUpdate może być używane do eksportowania instrukcji SQL do pliku zamiast ich wykonywania, ale nie jest to wygodne, ponieważ nie ma automatycznego zarządzania migracjami historii. Dodatkowo, trzeba pisać ręcznie SQL;)