J'ai construit un modèle de cadre d'entité sur une base de données de 2008. Tout fonctionne bien avec la base de données 2008. Lorsque j'essaye de mettre à jour l'entité sur une base de données 2005, j'obtiens cette erreur.
La version de SQL Server utilisée ne prend pas en charge le type de données 'datetime2
Je n'ai spécifiquement utilisé aucune fonctionnalité de 2008 lorsque j'ai créé la base de données. Je ne trouve aucune référence à datetime2 dans le code. Et, oui, la colonne est définie comme "datetime" dans la base de données.
la source
Vue rapide de la ligne:
la source
C'est très frustrant et je suis surpris que MS ait décidé de ne pas le faire pour que vous puissiez cibler une version SQL donnée. Pour être sûr que nous visons 2005, j'ai écrit une application console simple et l'ai appelée dans une étape PreBuild.
L'étape de pré-construction ressemble à ceci:
Le code est ici:
la source
En utilisant l'application console pratique de @ Vance ci-dessus, j'ai utilisé ce qui suit comme événement BeforeBuild
C'est très pratique, car cela évite un redéploiement ennuyeux. Merci d'avoir partagé Vance.
J'ai ajouté TF.exe au dossier de solution de bibliothèque et cela aide, car je peux maintenant vérifier les fichiers edmx avant d'essayer de les modifier, dans le cadre de la construction. J'ai également ajouté ceci avec des conditions, de sorte qu'il se règle en 2005 pour les déploiements sur le serveur et en 2008 pour les configurations de sln de machine de développement. Pour mentionner également, vous devez ajouter le (s) fichier (s) SetEdmxSqlVersion.exe (et .pdb) au dossier Bibliothèque (ou à tout autre endroit où vous souhaitez conserver ces bits).
Merci beaucoup @Vance. Vraiment soigné, gain de temps énorme et garde mes constructions totalement automatisées et sans douleur :)
la source
J'ai eu un problème similaire avec 2012 par rapport à 2008. Il peut être résolu avec un événement BeforeBuild en utilisant XmlPeek et XmlPoke:
Si vous n'aimez pas le remplacement automatisé, vous pouvez simplement remplacer la tâche XmlPoke par une tâche d'erreur.
la source
CallTarget
des tâches cibles pré-build conditionnelles en fonction des configurations de publication / build. (EG ne change que lors du déploiement dans un environnement sql2005)Pour le bénéfice des personnes qui rencontrent le même problème mais qui utilisent Code First , consultez ma réponse ici sur la façon de changer le
ProviderManifestToken
dans Code First. Cela implique de créer une instanceDbModelBuilder
manuellement et de transmettre uneDbProviderInfo
instance (avec le jeton approprié) lors de l'appel de laBuild
méthode du générateur de modèle .la source
Type System Version=SQL Server 2005
chaîne de connexion peut également fonctionnerLa meilleure solution pour moi est au lieu d'éditer manuellement le fichier EDMX, il suffit d'ouvrir edmx en mode conception et dans le menu contextuel "Mettre à jour le modèle à partir de la base de données ...". Vous devez bien sûr pointer vers la bonne version de SQL, quoi que ce soit pour vous.
la source
Nous avons eu cette erreur sur SQL2005 v.3, où nous ne l'avions pas sur SQL2005 v.4.
L'ajout de SQL2005 à la chaîne de connexion a résolu notre problème spécifique.
Nous n'avons pas encore identifié pourquoi et n'avons pas voulu modifier le code pour fournir le jeton comme résolu ci-dessus (problème manifesté lors du déploiement).
la source