Ich habe ein Entity-Framework-Modell für eine 2008-Datenbank erstellt. Gegen die Datenbank 2008 funktioniert alles in Ordnung. Wenn ich versuche, die Entität in einer 2005-Datenbank zu aktualisieren, wird dieser Fehler angezeigt.
Die verwendete Version von SQL Server unterstützt den Datentyp 'datetime2' nicht
Ich habe beim Erstellen der Datenbank keine 2008-Funktionen verwendet. Ich kann im Code keinen Verweis auf datetime2 finden. Und ja, die Spalte ist in der Datenbank als "Datum / Uhrzeit" definiert.
quelle
Schnellansicht der Linie:
quelle
Dies ist sehr frustrierend und ich bin überrascht, dass MS beschlossen hat, es nicht zu machen, damit Sie auf eine bestimmte SQL-Version abzielen können. Um sicherzustellen, dass wir auf 2005 abzielen, habe ich eine einfache Konsolen-App geschrieben und sie in einem PreBuild-Schritt aufgerufen.
Der vorgefertigte Schritt sieht folgendermaßen aus:
Der Code ist hier:
quelle
Mit der oben genannten praktischen Konsolen-App von @ Vance habe ich Folgendes als BeforeBuild-Ereignis verwendet
Dies ist sehr praktisch, da lästige Umschichtungen vermieden werden. Danke, dass du Vance geteilt hast.
Ich habe TF.exe zum Bibliothekslösungsordner hinzugefügt, und dies hilft, da ich jetzt die edmx-Dateien als Teil des Builds auschecken kann, bevor ich versuche, sie zu bearbeiten. Außerdem habe ich dies mit Bedingungen hinzugefügt, sodass es für Bereitstellungen auf dem Server auf 2005 und für die SLN-Konfigurationen des Dev-Computers auf 2008 zurückgesetzt wird. Um zu erwähnen, müssen Sie die tatsächlichen SetEdmxSqlVersion.exe- (und .pdb) -Dateien zum Bibliotheksordner hinzufügen (oder wo immer Sie diese Bits behalten möchten).
Vielen Dank @Vance. Wirklich ordentlich, enorm zeitsparend und hält meine Builds völlig automatisiert und schmerzfrei :)
quelle
Hatte ein ähnliches Problem mit 2012 vs. 2008. Es kann mit einem BeforeBuild-Ereignis mit XmlPeek und XmlPoke gelöst werden:
Wenn Sie das automatische Ersetzen nicht mögen, können Sie die XmlPoke-Aufgabe einfach durch eine Fehleraufgabe ersetzen.
quelle
CallTarget
abhängig von den Veröffentlichungs- / Erstellungskonfigurationen einfach über bedingte Zielaufgaben vor dem Erstellen verkettet werden . (EG ändert sich nur bei der Bereitstellung in einer SQL2005-Umgebung)Zum Wohle der Menschen , die das gleiche Problem auftritt , sondern verwenden Kodex zunächst Besuche meine Antwort hier darüber , wie die Änderungen
ProviderManifestToken
in der Code - Erste. Es geht um eine SchaffungDbModelBuilder
manuell und Leiten einerDbProviderInfo
Instanz (mit dem entsprechenden Token) , wenn das Modell Builder des rufendenBuild
Methode.quelle
Type System Version=SQL Server 2005
in Verbindungszeichenfolge gesetzt kann auch funktionierenEine bessere Lösung für mich ist, anstatt die EDMX-Datei manuell zu bearbeiten, edmx nur im Entwurfsmodus und im Kontextmenü "Modell aus Datenbank aktualisieren ..." zu öffnen. Sie müssen natürlich auf die richtige SQL-Version zeigen, was auch immer dies für Sie ist.
quelle
Wir hatten diesen Fehler in SQL2005 v.3, wo wir ihn in SQL2005 v.4 nicht hatten.
Das Hinzufügen von SQL2005 zur Verbindungszeichenfolge hat unser spezifisches Problem behoben.
Wir haben noch nicht herausgefunden, warum und wollten den Code nicht ändern, um das oben gelöste Token bereitzustellen (Problem während der Bereitstellung).
quelle