Zbudowałem model struktury encji na podstawie bazy danych z 2008 roku. Wszystko działa dobrze w stosunku do bazy danych z 2008 roku. Kiedy próbuję zaktualizować jednostkę w bazie danych 2005, pojawia się ten błąd.
Używana wersja programu SQL Server nie obsługuje typu danych „datetime2
W szczególności nie korzystałem z żadnych funkcji 2008 podczas tworzenia bazy danych. Nie mogę znaleźć żadnego odniesienia do datetime2 w kodzie. I tak, kolumna jest w bazie danych zdefiniowana jako „data / godzina”.
źródło
Szybki podgląd linii:
źródło
Jest to bardzo frustrujące i jestem zaskoczony, że MS zdecydowało się tego nie robić, abyś mógł kierować na daną wersję SQL. Aby upewnić się, że celujemy w rok 2005, napisałem prostą aplikację konsolową i wywołałem ją w kroku PreBuild.
Etap kompilacji wstępnej wygląda następująco:
Kod jest tutaj:
źródło
Korzystając z przydatnej aplikacji konsolowej @ Vance powyżej, użyłem następującego zdarzenia jako zdarzenia BeforeBuild
Jest to bardzo przydatne, ponieważ pozwala uniknąć irytującego ponownego wdrażania. Dzięki za udostępnienie Vance.
Dodałem TF.exe do folderu rozwiązania biblioteki i to pomaga, ponieważ mogę teraz sprawdzić pliki edmx przed próbą ich edycji, jako część kompilacji. Dodałem również to z warunkami, więc ustawia się na 2005 rok dla wdrożeń na serwerze i powrót do 2008 roku dla konfiguracji sln maszyny Dev. Wspomnij również, że musisz dodać aktualne pliki SetEdmxSqlVersion.exe (i .pdb) do folderu Library (lub gdziekolwiek chcesz zachować te bity).
Bardzo dziękuję @ Vance. Naprawdę schludny, ogromna oszczędność czasu, a moje kompilacje są całkowicie zautomatyzowane i bezbolesne :)
źródło
Miałem podobny problem z 2012 i 2008. Można go rozwiązać za pomocą zdarzenia BeforeBuild przy użyciu XmlPeek i XmlPoke:
Jeśli nie lubisz automatycznej zamiany, możesz po prostu zamienić zadanie XmlPoke na zadanie błędu.
źródło
CallTarget
warunkowych zadań docelowych przed kompilacją w zależności od konfiguracji publikowania / kompilacji. (Zmiana EG tylko podczas wdrażania w środowisku sql2005)Z korzyścią dla osób, które napotykają ten sam problem, ale używają Code First , zapoznaj się z moją odpowiedzią tutaj, aby dowiedzieć się, jak zmienić
ProviderManifestToken
w Code First. Polega naDbModelBuilder
ręcznym utworzeniuDbProviderInfo
instancji i przekazaniu jej (z odpowiednim tokenem) podczas wywoływania metody konstruktora modeluBuild
.źródło
Type System Version=SQL Server 2005
połączenia może również działaćLepszym rozwiązaniem dla mnie jest zamiast ręcznej edycji pliku EDMX wystarczy otworzyć edmx w trybie projektowania iw menu kontekstowym „Uaktualnij model z bazy danych…”. Musisz oczywiście wskazywać właściwą wersję SQL, cokolwiek to jest dla Ciebie.
źródło
Wystąpił ten błąd w SQL2005 v.3, gdzie nie było go w SQL2005 v.4.
Dodanie SQL2005 do parametrów połączenia rozwiązało nasz konkretny problem.
Nie zidentyfikowaliśmy jeszcze przyczyny i nie chcieliśmy modyfikować kodu, aby udostępnić token zgodnie z powyższym rozwiązaniem (problem pojawił się podczas wdrażania).
źródło