Przede wszystkim oznaczono to tagiem studia wizualnego 2012 - jeśli używasz tej wersji, upewnij się, że uaktualniasz ją do wersji 2013 lub 2015 i otrzymujesz najnowszą wersję SSDT, ponieważ co 3 miesiące pojawiają się nowe wersje z nowymi funkcjami i poprawkami więc warto jest dostać nowszą wersję - bity, o których mówię poniżej, to aktualne zachowanie, nie wiem, czy to wszystko było dostępne w oryginalnym ssdt w visual studio 2012.
Jest kilka rzeczy do powiedzenia, po pierwsze można wymusić uporządkowane wdrożenia za pomocą opcji/p: BlockWhenDriftDetected w połączeniu z rejestracją bazy danych jako aplikacji warstwy danych (/ p: RegisterDataTierApplication). Pozwoliłoby to, aby to zrobić:
- Budowa dacpac 1
- Deploy dacpac 1
- Budowa dacpac 2
- Deploy dacpac 2
- Budowa dacpac 3
To zatrzyma możesz wdrożyć dacpac 2 zanim wdrożyłeś dacpac 1, ale nie jest to idealne rozwiązanie, ponieważ jeśli zbudujesz dacpac 3 przed wdrożeniem dacpac 2, nie będziesz mógł wdrożyć z przebudowuje dacpac 3, więc nie jest idealny.
Kiedy zajmujesz się zmianami w bazie danych (jakikolwiek rdbms nie tylko serwer sql) czasami zdarzają się sytuacje, w których musimy wprowadzać zmiany w fazach i dla mnie jest to bardziej kwestia procesu niż technologia.Co mogę zrobić, to:
- Utwórz pierwszą część zmian
- Tworzenie bilet w portfelu sfinalizować zmiana
- wdrożyć zmianę
- w kolejnej iteracji po wdrożeniu, podnieś bilet do sfinalizowania zmian
- Wdrażanie finalizację
Niektóre rzeczy zwrócić uwagę na ten temat:
- Potrzeba dyscypliny, aby upewnić się uporządkować i kompletny materiał, pracuje w błyskotliwy sposób nie oznacza, niechlujny :)
- Wszelkie skrypty piszesz należy idempotent więc jeśli chcesz skonfigurować niektóre dane statyczne etc używać coś takiego, jeśli istnieje czeków lub oświadczenie scalania, jeśli modyfikować żadnych obiektów schematu owinąć je, jeśli istnieje itp Jeśli to zrobisz znajdziesz wdrażania znacznie bardziej proste doświadczenie
Jeśli zastosujemy ten proces, zamiast polegać na typie polityki wersji, nie musisz się martwić kolejnością wdrażania dacpacs, jeśli skrypt jest ważny, pozostaw go w skrypcie po wdrożeniu i sprawdź, czy skrypt powinien wykonać jakąkolwiek pracę przed wykonaniem tego skryptu. Jeśli twoje skrypty są zbyt duże, możesz użyć: r importu sqlcmd, aby rozdzielić je na różne pliki. Słyszałem również o ludziach używających procedur przechowywanych w bazie danych i wywołujących je ze skryptów po wdrożeniu.
Preferuję proces, w którym po prostu wdraża się najnowszą (lub określoną wersję) dacpaca, ponieważ oznacza to, że zawsze można wdrożyć do tej wersji bez względu na to, czy przechodzimy do późniejszej kompilacji, czy też z powrotem do wcześniejszej wersji.
Wreszcie, wraz z przykładem dodawania nieakceptowalnej kolumny fk, można to zrobić z pojedynczym wdrożeniem dacpaca. Aby to zrobić, byś:
- Utwórz nową definicję tabeli (łącznie niepuste i klucza obcego przymusu)
- W skrypcie po deploy zrobić aktualizacji na stole tak, że ustawia dane poprawnie (oczywiście czyni go idempotent więc może pozostać na zawsze, jeżeli potrzeby być)
- podczas wdrażania włączyć/p: GenerateSmartDefaults
Co się dzieje, gdy skrypt rozmieszczenie jest generowany jest dostać skrypt, który wygląda tak:
- Pre-Deploy skrypt (jeśli występują)
- Utwórz kolumnę NOT NULL z tymczasowym domyślne ograniczenie
- Kropla tymczasowe ograniczenie
- Tworzenie klucza obcego z nocheck więc nie jest rzeczywiście enfored
- Run post- wdrożyć skrypt
- Włącz ograniczenie klucza obcego przy użyciu „z check”
/P: Parametry rzeczy ja wielobranżowe jonowane to argumenty przekazywane do programu sqlpackage.exe.jeśli nie używasz tego, ale używasz innej metody wdrażania, możesz normalnie przekazać je jako parametry, jeśli dasz mi znać, w jaki sposób się wdrożysz, jeśli utkniesz i będę mógł ci pomóc. Aby uzyskać opis argumentów zobacz https://msdn.microsoft.com/en-us/library/hh550080.aspx (składnia wiersza poleceń sqlpackage.exe).
Daj mi znać, jeśli masz jakieś pytania, jest jeszcze kilka rzeczy do przemyślenia, ale sprawdzenie definicji schematu i wdrożenie automatycznych skryptów powoduje znaczne zmniejszenie nakładu pracy, co oznacza, że możesz skoncentrować się na czymś bardziej użytecznym. - pisanie testów jednostkowych dla jednego :).
Ed
Czy obejrzałeś Ready-Roll? http://www.ready-roll.com/ To narzędzie RedGate, które integruje się z Visual Studio. Myślę, że właśnie o to prosisz. –
Ponieważ pytasz o inne typy projektów, zapoznaj się z [Entity Framework 7 z migracjami] (https://channel9.msdn.com/Blogs/Seth-Juarez/Migrations-in-Entity-Framework-7- z-Brice-Lambson) –