Trafiłem ostatnio dokładnie w tę samą sytuację. Moje migracje z użyciem kodu EF często wprowadzają nową tabelę lub kolumnę, a następnie przenoszę dane przy użyciu Sql (...) do tych migracji, które czasem chcą odwoływać się do nowej tabeli/kolumny. Jak zauważyłeś, podczas uruchamiania jako migracja kodu EF, każda instrukcja wydaje się być wydana jako dyskretna partia do DB, a zatem nie ma żadnych problemów. Jednak aby spełnić ograniczenia wdrażania produkcji, zamieniamy zestaw migracji kodu ze sprintu w pojedynczy skrypt (za pomocą -Script), aby przedstawić pojedynczą zagregowaną migrację skryptu SQL dla zespołu wdrożeniowego. Ten plik skryptowy czasami kończy się niepowodzeniem, jak zauważyłeś, ponieważ próbował przetworzyć pojedynczą partię T SQL z pojedynczej migracji kodu, gdzie późniejsze instrukcje próbują odnosić się do struktury, która została zdefiniowana tylko wcześniej w partii.
ja nie szczególnie jak jedno z dwóch podejść wziąłem teraz, aby złagodzić ten, ale oto one:
się. Jeśli zdarzy mi się, że o tym myślę, podzielę migrację kodu na dwie migracje, aby po skrypcie były w dwóch (lub więcej) oddzielnych partiach. Nie podoba mi się to, ponieważ nie ma sprzężenia zwrotnego podczas rozwoju Code Migration, że jest to konieczne, a zatem wydaje się być podatne na błędy.
b. Kiedy generuję skrypty agregujące, uruchamiam je na bazie DB w celu ich udowodnienia, a następnie ręcznie wstrzykiwuję instrukcje "GO" tam, gdzie jest to konieczne w tym skrypcie. Jest to irytujący proces, który trzeba cofnąć i wykonać, i daje wynik w języku -Script, który nie jest 100% odzwierciedleniem migracji kodu.
Nie spędziłem zbyt wiele czasu na wkopywanie się w kod źródłowy Migracji kodu EF, aby sprawdzić, czy rozumiem, dlaczego interpretuje "GO" jako przechowywany proc i czy w kodzie źródłowym jest coś, co wskazywałoby w celu zapewnienia dyrektywy, która pozwoliłaby na uniknięcie tego.
Dlaczego potrzebujesz GO? Nie jest to instrukcja SQL - jest to polecenie dla narzędzi SQL. –
@LadislavMrnka - Zdefiniowałem doskonale prawdopodobny przypadek użycia (i związane z nim problemy) w tym pytaniu: http://stackoverflow.com/q/13589986/476786 – bPratik